gpt4 book ai didi

java - 使用 java 流设置并集和交集

转载 作者:行者123 更新时间:2023-11-29 06:26:42 25 4
gpt4 key购买 nike

我目前有一个 java 程序,它使用嵌套的 for 循环来计算一组整数列表的并集和交集。如何使用 java parallel 流来做到这一点?我目前的代码如下

for(Set<Integer> x : listA) {
for (Set<Integer> y : listB) {
Set u = Sets.union(x,y); // Uses Guava library
Set i = Sets.intersection(x,y);
}
}

我想加快速度,因为 listA 和 listB 很大。

最佳答案

联合不需要流,但是,可以将其用于交集,例如:

Set<Integer> setA = new HashSet<>(Arrays.asList(1,2,3));
Set<Integer> setB = new HashSet<>(Arrays.asList(2,3,4));
Set<Integer> union = new HashSet<>();
union.addAll(setA);
union.addAll(setB);

Set<Integer> intersection = setA.parallelStream()
.filter(setB::contains)
.collect(Collectors.toSet());

System.out.println("Union : " + union);
System.out.println("Intersection : " +intersection);

更新

以上代码使用 Java 的 native 库和 streams 查找交集和并集。但是,如果你有一个集合列表,那么你可以将上面的代码包装在函数中,并从迭代两个列表的 stream 调用它,例如:

private static void unionAndIntersection(Set<Integer> setA, Set<Integer> setB) {
Set<Integer> union = new HashSet<>();
union.addAll(setA);
union.addAll(setB);

Set<Integer> intersection = setA.parallelStream()
.filter(setB::contains)
.collect(Collectors.toSet());

System.out.println("Union : " + union);
System.out.println("Intersection : " +intersection);
}

public static void main(String[] args){
List<Set<Integer>> listA = new ArrayList<>();
List<Set<Integer>> listB = new ArrayList<>();
listA.stream()
.forEach(a -> {
listB.stream()
.forEach(b -> unionAndIntersection(a, b));
});
}

关于java - 使用 java 流设置并集和交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55138287/

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