作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个集合如下
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/
所以,我有一个类似于 this one 的用例,但我觉得有一些额外的细节值得提出一个新问题。 ( related questions ,供引用) 我正在编写一个实现 a cycle 的数据结构.基本设
我正在使用 Django 编写一个社交网络应用程序,需要实现类似于 Facebook“Mutual Friends”概念的功能。我有一个像这样的简单模型: class Friend(models.Mo
我有一个 iOS 应用程序,用户可以在其中使用 Facebook 登录并授予 user_friends 权限。从 Graph API 2.0 开始,Facebook 声称你无法获取两个人之间所有的共同
我想知道将来对我来说最简单的方法是什么,可以使查询既有效又不那么复杂。 我应该像这样保存双向关系吗 from_id=1, to_id=2from_id=2, to_id=1 或者只创建一个唯一的行 f
我是一名优秀的程序员,十分优秀!