我有一个从 Google Places API 获取的 Google PlaceSummary 对象列表。我想按他们的 Google Place ID 收集和分组它们,但也保留元素的顺序。我认为可行的是:
Map<String, List<PlaceSummary>> placesGroupedByPlaceId =
places.stream()
.collect(Collectors.groupingBy(
PlaceSummary::getPlaceId,
LinkedHashMap::new,
Collectors.mapping(PlaceSummary::getPlaceId, toList())
));
但它甚至不会编译。看起来应该根据Collectors 上的 Java API 文档。
以前我有这个代码:
Map<String, List<PlaceSummary>> placesGroupedByPlaceId = places.stream()
.collect(Collectors.groupingBy(PlaceSummary::getPlaceId));
然而.collect()
,Streams API 的标准不保留后续元素的顺序HashMap
(显然因为HashMap
s 是无序的)。我希望输出是 aLinkedHashMap
以便 Map 按每个桶的插入顺序排序。
但是,我建议的解决方案无法编译。首先,它不识别,PlaceSummary::getPlaceId
因为它说它不是一个函数——即使我知道它是。其次,它说我不能转换LinkedHashMap<Object, Object>
成 M. M 应该是一个通用集合,所以它应该被接受。
如何LinkedHashMap
使用 Java Stream API 将 List 转换为 a?有没有简洁的方法来做到这一点?如果太难理解,我可能会求助于 Java 8 之前的老式方法。
我注意到在将 List 转换为 LinkedHashMap 时还有另一个 Stack Overflow 答案,但这没有我想要的解决方案,因为我需要收集“这个”我专门迭代的对象。