过程:
首先我使用entities.sort(Comparator.comparing(Entity::getYear))
对entities按照年份正序排列
然后需要对entities通过年份在进行分组。
但是在使用Collectors.groupingBy(Entity::getYear)
时,发现最终结果并不是按照年份正序排列的。
原因:
Collectors.groupingBy
方法创建的Map
默认是HashMap
,它不保证元素的顺序。
即使对entities
进行了排序,但在使用Collectors.groupingBy
时,结果会存储在HashMap
中,因此插入的顺序并不会保留。
如果希望保留插入顺序或按照特定顺序排列,可以使用LinkedHashMap
或TreeMap
来替代默认的HashMap
。
这样就可以确保在对值进行分组时按照期望的顺序进行排列。
解决方法:
在Collectors.groupingBy
方法的第二个参数加入LinkedHashMap::new来保留插入顺序。
代码如下:
Map<String, List<Entity>> groupByYear =
entities.stream().collect(Collectors.groupingBy(Entity::getYear, LinkedHashMap::new, Collectors.toList()));