Java的stream流多個字段排序的實現(xiàn)
1、第一種是固定多個字段排序
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
class Person {
String name;
int age;
double salary;
public Person(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
'}';
}
}
public class Main {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("張三", 30, 5000),
new Person("李四", 25, 6000),
new Person("王五", 35, 4000)
);
List<Person> sortedPeople = people.stream()
.sorted(Comparator.comparing(Person::getName).thenComparing(Person::getAge).thenComparing(Person::getSalary))
.collect(Collectors.toList());
sortedPeople.forEach(System.out::println);
}
}
2、第二種動態(tài)字段進行排序
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
class Person {
String name;
int age;
double salary;
public Person(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
'}';
}
}
public class Main {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("張三", 30, 5000),
new Person("李四", 25, 6000),
new Person("王五", 35, 4000)
);
// 動態(tài)傳入排序字段
String sortField = "age"; // 可以修改為"name"或"salary"
List<Person> sortedPeople = people.stream()
.sorted(getComparator(sortField))
.collect(Collectors.toList());
System.out.println(sortedPeople);
}
private static Comparator<Person> getComparator(String sortField) {
switch (sortField) {
case "name":
return Comparator.comparing(Person::getName);
case "age":
return Comparator.comparingInt(Person::getAge);
case "salary":
return Comparator.comparingDouble(Person::getSalary);
default:
throw new IllegalArgumentException("Invalid sort field: " + sortField);
}
}
}到此這篇關(guān)于Java的stream流多個字段排序的實現(xiàn)的文章就介紹到這了,更多相關(guān)Java stream多字段排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Elasticsearch倒排索引詳解及實際應(yīng)用中的優(yōu)化
Elasticsearch(ES)使用倒排索引來加速文本的搜索速度,倒排索引之所以高效,主要是因為它改變了數(shù)據(jù)的組織方式,使得查詢操作可以快速完成,這篇文章主要給大家介紹了關(guān)于Elasticsearch倒排索引詳解及實際應(yīng)用中優(yōu)化的相關(guān)資料,需要的朋友可以參考下2024-08-08
SpringBoot2.x實現(xiàn)給Controller的RequestMapping添加統(tǒng)一前綴
這篇文章主要介紹了SpringBoot2.x實現(xiàn)給Controller的RequestMapping添加統(tǒng)一前綴,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
spring-boot 3.X版本整合RocketMq的詳細過程
本文詳細介紹了如何使用Spring Boot和RocketMQ進行整合,并提供了一個簡單的示例工程,描述了如何本地啟動RocketMQ服務(wù)端,并使用IntelliJ IDEA創(chuàng)建和配置了一個Spring Boot項目,包含了生產(chǎn)者和消費者,并解決了在Spring Boot 3.x版本中RocketMQTemplate沒有bean注入的問題2024-11-11
SpringBoot中使用Quartz設(shè)置定時任務(wù)的實例詳解
Quartz是OpenSymphony開源組織在任務(wù)調(diào)度領(lǐng)域的一個開源項目,完全基于 Java 實現(xiàn),本文小編給大家介紹了SpringBoot中如何使用Quartz設(shè)置定時任務(wù),文中通過代碼示例給大家講解的非常詳細,需要的朋友可以參考下2023-12-12
Java?spring注解@PostConstruct實戰(zhàn)案例講解
我們在Spring項目中經(jīng)常會遇到@PostConstruct注解,可能有的伙伴對這個注解很陌生,下面這篇文章主要給大家介紹了關(guān)于Java?spring注解@PostConstruct實戰(zhàn)案例講解的相關(guān)資料,需要的朋友可以參考下2023-12-12
java操作excel導(dǎo)入導(dǎo)出的3種方式
項目需要,要實現(xiàn)一個導(dǎo)入導(dǎo)出excel的功能,于是任務(wù)驅(qū)動著我學(xué)習到了POI、easypoi和easyexcel這3個java操作Excel的工具,下面這篇文章主要給大家介紹了關(guān)于java操作excel導(dǎo)入導(dǎo)出的3種方式,需要的朋友可以參考下2023-05-05

