gpt4 book ai didi

java - 在 Java 8+ 中对 map 进行分区

转载 作者:IT老高 更新时间:2023-10-28 20:49:47 26 4
gpt4 key购买 nike

我有一个 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>>> .

最佳答案

您可以使用 toMap(作为下游收集器)减少每个组:

Map<String, String> myMap = new HashMap<>();
myMap.put("d", "D");
myMap.put("c", "C");
myMap.put("b", "B");
myMap.put("A", "A");

List<String> myList = Arrays.asList("a", "b", "c");

Map<Boolean, Map<String, String>> result = myMap.entrySet()
.stream()
.collect(Collectors.partitioningBy(
entry -> myList.contains(entry.getKey()),
Collectors.toMap(Entry::getKey, Entry::getValue)
)
);

对于这个例子,产生 {false={A=A, d=D}, true={b=B, c=C}}

关于java - 在 Java 8+ 中对 map 进行分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54549960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com