gpt4 book ai didi

java - 查找具有共同值的 map 集条目

转载 作者:行者123 更新时间:2023-12-05 03:27:50 27 4
gpt4 key购买 nike

我有一个集合如下

Map<String, Set<Long>> myMap = new HashMap<>();

我想查明此 map 中的任何条目是否已设置,而该条目包含在同一 map 的另一个条目中。

例如,假设 map 有以下 5 个条目

a - {1, 2, 3}
b - {4, 5}
c - {1}
d - {2, 3}
e - {5}
f - {6}

因此,它可能具有以下重叠条目

a - {1, 2, 3}  and c - {1} 
b - {4, 5} and e - {5}
a - {1, 2, 3} and d - {2, 3}

或者只是键的集合列表,例如

a and c
b and e
a and d

我可以迭代每个键集,然后对每个键集使用 disjoint 或 anyMatch,但我想知道是否有优化的方法(Java 8、9、10、11)。

最佳答案

将解决方案作为嵌套循环或流进行比较。

编辑:将代码缩减为相关内容

import java.util.*;
import java.util.function.BiPredicate;
import java.util.stream.Collectors;

class Main {
public static void main(String[] args) {
Map<String, Set<Long>> myMap = new HashMap<>();

myMap.put("a", Set.of( 1l, 2l, 3l ));
myMap.put("b", Set.of( 4l, 5l ));
myMap.put("c", Set.of( 1l ));
myMap.put("d", Set.of( 2l, 3l ));
myMap.put("e", Set.of( 5l ));
myMap.put("f", Set.of( 6l ));

Set<String> keys = myMap.keySet();
BiPredicate<String, String> condition = (a, b) -> !a.equals(b) &&
myMap.get(a).size() >= myMap.get(b).size() &&
myMap.get(a).containsAll(myMap.get(b));

// nested Loop
Set<Map.Entry<String, String>> nested = new HashSet<>();
for (String a : keys)
for (String b : keys)
if (condition.test(a, b)) nested.add(Map.entry(a, b));

System.out.println(nested);

// stream
Set<Map.Entry<String, String>> collect = keys.stream()
.flatMap(a -> keys.stream()
.filter(b -> condition.test(a, b))
.map(b -> Map.entry(a, b)))
.collect(Collectors.toSet());

System.out.println(collect);

}
}

关于java - 查找具有共同值的 map 集条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71352452/

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