
JAVA8如何对list分组和排序
我有一个包含多个对象的List,想要根据对象的某个属性值将这些对象进行分组,该如何利用Java8的Stream API实现?
利用Java8 Stream的groupingBy方法分组
Java8的Stream API提供了Collectors.groupingBy方法,可以根据指定的函数对流中的元素进行分组。比如,list.stream().collect(Collectors.groupingBy(对象::获取属性方法)),这样可以得到一个Map,key是分组的属性,value是对应的对象集合。
我需要对List中的对象先按一个属性排序,再按另一个属性排序,Java8有哪些方法可以实现多级排序?
使用Comparator的thenComparing实现多级排序
Java8的Comparator接口新增了thenComparing方法,可以进行链式比较。可以先通过Comparator.comparing(对象::第一个属性方法)来比较,再调用thenComparing(对象::第二个属性方法)来做次级排序。最后使用list.stream().sorted(构建的Comparator)或者list.sort(Comparator)完成排序。
我想先根据某个属性对List元素进行分组,分组内的元素还需要进行排序,该如何用Java8的Stream API一次性实现?
结合groupingBy和sorted在分组内排序
可以利用Collectors.groupingBy结合Collectors.collectingAndThen或mapping来实现分组的同时,对组内元素进行排序。通常做法是,先用groupingBy按属性分组,value部分使用Collectors.toList()后再对每个List调用sort()或在收集阶段使用sorted流操作。