stream 流中toMap和groupBy映射时顺序错乱问题
toMap方法
使用LinkedHashMap保留原来的顺序。
querySupplierSalesRankVOList.stream()
.collect(Collectors.toMap(QuerySupplierSalesRankVO::getSupplierName, Function.identity(), (k1, k2) -> k1, LinkedHashMap::new))
mergeFunction用于设置遇到重复的key保留哪个的问题。(k1, k2) -> k1后面的哪个遇到重复的就保留那个key的值
Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction) {
return toMap(keyMapper, valueMapper, mergeFunction, HashMap::new);
}
原方法是直接丢出异常
private static <T> BinaryOperator<T> throwingMerger() {
return (u,v) -> { throw new IllegalStateException(String.format("Duplicate key %s", u)); };
}
groupingBy方法
list.stream()
.collect(Collectors.groupingBy(Animal::getAge, LinkedHashMap::new, Collectors.toList()));
也可改成LinkedHashMap来保证有序性。