一、组合字段
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/n/301459.html
微信扫一扫
支付宝扫一扫