在實際使用過程中我們在好多時候需要對列表中的數據進行排序,Stream中的sorted方法就很好的解決了這個問題,一下是我對sorted方法的一些理解
首先對列表中的數據進行排序病存放到新的列表中
//創建一個數據列表 List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); //對列表中的數據進行排序 List<Integer> squaresList = numbers.stream().sorted().collect(Collectors.toList()); System.out.println("排序: " + squaresList);
//對列表中的數據逆序排序
squaresList = numbers.stream().sorted((x, y) -> y - x).collect(Collectors.toList());
System.out.println("逆序: " + squaresList);
//對於進行逆序排序來說還可以使用Comparator 提供的reverseOrder() 方法
squaresList = numbers.stream().sorted(Comparator.reverseOrder())
//或者逆序還可以使用.reversed()
.sorted(Comparator.comparing(StudentInfo::getAge).reversed())
另外,還可以對字符列表進行排序
//對字符列表進行排序 List<String> strList = Arrays.asList("a", "ba", "bb", "abc", "cbb", "bba", "cab"); Map<Integer, String> strMap = new HashMap<Integer, String>(); strMap = strList.stream().collect( Collectors.toMap( str -> strList.indexOf(str), str -> str ) ); strMap.forEach((key, value) -> { System.out.println(key+"::"+value); });
另外sorted方法不僅僅可以對一些簡單的列表進行排序,還可以根據某一個對象中的某個屬性值對整個對象列表進行一個排序
例如:
//根據學生表中的年齡進行排序 list.stream().sorted(Comparator.comparing(Student::getAge)) //對學生表中的年齡進行逆序排序 list.stream().sorted(Comparator.comparing(Student::getAge).reversed())
//使用年齡進行排序,年齡相同后使用身高排序
list.stream().sorted(Comparator.comparing(Student::getAge).reversed().thenComparing(Student::getHeight)).collect(Collectors.toList());