一、組合字段
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-hk/n/301459.html