不维持秩序是其财产Map
存储结果。如果您需要特定的Map
行为,你需要请求特定的Map执行. E.g. LinkedHashMap保持插入顺序:
groupedResult = people.collect(Collectors.groupingBy(
p -> new GroupingKey(p, groupByColumns),
LinkedHashMap::new,
Collectors.mapping((Map<String, Object> p) -> p, toList())));
顺便说一句,没有理由复制内容mapList
在创建之前将其放入数组中Stream
。您可以简单地致电mapList.stream()
以获得合适的Stream
.
更远,Collectors.mapping((Map<String, Object> p) -> p, toList())
已经过时了。p->p
是一个身份映射,所以没有理由请求mapping
at all:
groupedResult = mapList.stream().collect(Collectors.groupingBy(
p -> new GroupingKey(p, groupByColumns), LinkedHashMap::new, toList()));
但即使是GroupingKey
已经过时了。它基本上包含了一个List
值,所以你可以只使用List
首先作为关键。List
实施hashCode
and equals
适当地(但你must not修改这些键值List
之后)。
Map<List<Object>, List<Object>> groupedResult=
mapList.stream().collect(Collectors.groupingBy(
p -> groupByColumns.stream().map(p::get).collect(toList()),
LinkedHashMap::new, toList()));