Stream中sorted方法的使用方式
在实际使用过程中我们在好多时候需要对列表中的数据进行排序,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());