【发布时间】:2019-06-30 04:33:24
【问题描述】:
我有一个Map<String, String> 和一个List<String>。我想根据条件对Map 进行分区
foreach(map.key -> list.contains(map.key))
并产生两个Map(s)。这样做最优雅的方式是什么?我在 Java 11 上,所以你可以在答案中抛出你想要的一切。
我现在想到的是:
map.entrySet()
.stream()
.collect(partitioningBy(e -> list.contains(o.getKey())));
但这给出了Map<Boolean, List<Entry<String, String>>>。
【问题讨论】:
-
你能举一个真实数据的例子吗?你想实现什么?而且我不一定要在这里全流:一个流创建一个结果,但你想要两张地图?!
-
查看相关的 stackoverflow.com/questions/28856781。最好的方法取决于地图和列表的大小,以及应该如何使用结果。例如,Guava Maps 可以简单快速地在原始地图上提供 2 个过滤视图以避免额外的内存使用,但如果在结果中多次调用 contains(),则性能可能会非常差。
标签: java java-stream