[英]Java Streams - How to preserve the initial Order of elements while using Collector groupingBy()
我正在嘗試將對象列表轉換為對象列表列表,即將List<T>
轉換為List<List<T>>
並通過用作排序鍵的字符串列表對它們進行分組。
問題是在groupingBy()
之后,返回值是一個映射,並且映射不同的值順序。
我可以做些什么來保留列表groupedTreesList
中元素的初始順序?
我的代碼:
Map<List<String>,List<QueryTreeProxy>> groupedMap = treesProxyList.stream()
.collect(Collectors.groupingBy(
QueryTreeProxy::getMappingKeys,
Collectors.toList()
));
List<List<QueryTreeProxy>> groupedTreesList = groupedMap.values().stream().toList();
groupingBy()
,返回值是一個映射,該映射輸出不同順序的值列表
您可以使用另一種groupingBy(classifier, mapFactory, downstream)
,它允許您指定 Map 的類型。 我們可以使用LinkedHashMap
來保存初始順序。
並且不需要生成第二個流,您可以使用ArrayList
的參數化承包商來代替。
Map<List<String>, List<QueryTreeProxy>> groupedMap = treesProxyList.stream()
.collect(Collectors.groupingBy(
QueryTreeProxy::getMappingKeys,
LinkedHashMap::new,
Collectors.toList()
));
List<List<QueryTreeProxy>> groupedTreesList = new ArrayList<>(groupedMap.values());
除此之外,使用可變對象作為鍵並不是一個好習慣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.