一、組合字段
public class Person {
private String name;
private int age;
private String gender;
// 構造函數、getter和setter等省略
}
List personList = new ArrayList();
personList.add(new Person("Alice", 20, "female"));
personList.add(new Person("Bob", 25, "male"));
personList.add(new Person("Charlie", 22, "male"));
personList.add(new Person("Diana", 20, "female"));
// 按照age升序排列,相同age根據gender降序排列,相同age和gender根據name升序排列
personList.sort(
Comparator.comparingInt(Person::getAge)
.thenComparing(Person::getGender, Comparator.reverseOrder())
.thenComparing(Person::getName)
);
personList.forEach(System.out::println);
當需要按照多個字段進行排序時,需要使用thenComparing方法進行拼接。例子中先按照age進行排序,如果age相同,則按照gender進行降序排列,如果gender相同,則按照name升序排列。
二、JDK8 List分組
public class User {
private String name;
private int age;
// 構造函數、getter和setter等省略
}
List userList = new ArrayList();
userList.add(new User("Alice", 20));
userList.add(new User("Bob", 25));
userList.add(new User("Charlie", 22));
userList.add(new User("Diana", 20));
Map<Integer, List> ageMap = userList.stream()
.collect(Collectors.groupingBy(User::getAge));
ageMap.forEach((age, list) -> {
System.out.println("Age: " + age);
list.forEach(user -> System.out.println(" " + user.getName()));
});
使用stream和groupingBy方法可以對List進行分組操作。例子中按照age字段進行分組,結果為一個Map,key為age,value為User對象的List。
三、JDK8 List轉Map
public class Student {
private String name;
private int id;
// 構造函數、getter和setter等省略
}
List studentList = new ArrayList();
studentList.add(new Student("Alice", 1));
studentList.add(new Student("Bob", 2));
studentList.add(new Student("Charlie", 3));
studentList.add(new Student("Diana", 4));
Map idNameMap = studentList.stream()
.collect(Collectors.toMap(Student::getId, Student::getName));
idNameMap.forEach((id, name) -> System.out.println(id + ": " + name));
使用stream和toMap方法可以將List轉換成Map。例子中將List轉換成一個Map,key為id,value為name。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/301459.html
微信掃一掃
支付寶掃一掃