Union集基于Java中的Intersection
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Union集基于Java中的Intersection相关的知识,希望对你有一定的参考价值。
我正在尝试基于交集的联合集。例如:
我有一套:{[4,5,7],[1,3,4,6],[5,6,8],[40,41],[38,40],[36,37, 41]}
结果应该是:{[1,3,4,7,5,8,6],[40,36,37,41,38]}
注意:前三组有4和6交叉。这同样适用于最后三组,它们有40和41作为交点。
我试图迭代原始集,但迭代时无法修改它。有关如何处理此问题的任何想法?
答案
我想我明白了。如果你认为不对,请告诉我。但是,我正在分享它以防有人正在寻找答案!
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import com.google.common.collect.Sets;;
public class TestSet {
public static Set<Set<Integer>> origSets = new HashSet<Set<Integer>>();
public static Set<Set<Integer>> allSets = new HashSet<Set<Integer>>();
public static void main(String[] args) {
// TODO Auto-generated method stub
Set<Integer> set1 = new HashSet<>(Arrays.asList(4, 5, 7));
Set<Integer> set2 = new HashSet<>(Arrays.asList(1, 3, 4, 6));
Set<Integer> set3 = new HashSet<>(Arrays.asList(5, 4, 8));
Set<Integer> set4 = new HashSet<>(Arrays.asList(40, 41));
Set<Integer> set5 = new HashSet<>(Arrays.asList(38, 40));
Set<Integer> set6 = new HashSet<>(Arrays.asList(36, 37, 41));
origSets.add(set1);
origSets.add(set2);
origSets.add(set3);
origSets.add(set4);
origSets.add(set5);
origSets.add(set6);
for (Set<Integer> eachSet : origSets) {
processSet(eachSet);
}
printResult();
}
public static void processSet(Set<Integer> candi) {
boolean flag = false;
if (!allSets.isEmpty()) {
for (Set<Integer> old_set : allSets) {
Set<Integer> intersected = Sets.intersection(candi, old_set);
if (!intersected.isEmpty()) {
addSet(candi, old_set);
allSets.remove(old_set);
flag=true;
break;
} else {
continue;
}
}
if(!flag){
allSets.add(candi);
}
} else {
allSets.add(candi);
}
}
public static void addSet(Set<Integer> candi, Set<Integer> new_set) {
Set<Integer> candidate = Sets.union(candi, new_set);
allSets.add(candidate);
}
public static void printResult(){
for(Set<Integer> eachSet :allSets){
System.out.println(eachSet);
}
}
}
输出:
[38, 40, 36, 37, 41]
[1, 3, 4, 6, 5, 8, 7]
我们的想法是创建一个新的空集合集(我们称之为allSets)并在时间上从源集合中提供一组(每次我们检查交集时,如果我们将它们联合起来并将其添加到空集(allSets) 。
以上是关于Union集基于Java中的Intersection的主要内容,如果未能解决你的问题,请参考以下文章