2016-08-04 5 views
1

2つの異なるコレクションを持つプログラムを作成しました。これらの2つのコレクションからどのようにユニオン、交差点および相違点を得ることができますか? BitSetにはメソッドがありますが、ここでは機能しません。ユニオン、交点および差異のJavaコレクションメソッド

public class Collections { 

public static void main(String[] args) { 

    // 1. Collection 
    Set<Integer> grp1 = new HashSet<Integer>(); 

    grp1.add(1); 
    grp1.add(2); 
    grp1.add(3); 
    grp1.add(4); 
    grp1.add(5); 

    // printing 1. collection 
    System.out.println("1. collection: "); 
    Iterator<Integer> i = grp1.iterator(); 
    while(i.hasNext()) { 
     int numbers1 = i.next(); 
     System.out.print(numbers1 + " "); 
    } 
    System.out.println(); 

    // 2. collection 
    Set<Integer> grp2 = new HashSet<Integer>(); 

    grp2.add(8); 
    grp2.add(7); 
    grp2.add(6); 
    grp2.add(5); 
    grp2.add(4); 

    // printing 2. collection 
    System.out.println("2. collection: "); 
    Iterator<Integer> y = grp2.iterator(); 
    while(y.hasNext()) { 
     int numbers2 = y.next(); 
     System.out.print(numbers2 + " "); 

    // Union 


    // Intersection 


    // Difference 

     } 
    } 

} 

答えて

6

連合:

Set<Integer> union = new HashSet<>(grp1); 
union.addAll(grp2); 

交差点:

Set<Integer> intersection = new HashSet<>(grp1); 
intersection.retainAll(grp2); 

違い:それはSetsクラスの中で

Set<Integer> diff = new HashSet<>(grp1); 
diff.removeAll(grp2); 
+0

を参照してください。あなたのコードは残念ながらコンパイルされません。私はそれが欲しかった。 –

+0

私はすでにそれらを試しましたが、Eclipseで動作しないものはありません: ''タイプの不一致:ブール値からに変換できません。編集:ショーンのようにブール値を返すと述べた。 – Daniel

+0

ああ、本当!私は署名について忘れてしまった!あまりにも多くの時間をスカラ:) –

2

Guavaは、これらの事業を展開しています。

Set<Integer> union = Sets.union(set1, set2); 
Set<Integer> intersection = Sets.intersection(set1, set2); 
Set<Integer> difference = Sets.difference(set1, set2); 

これらのすべては元のセットに基づいて変更不可能なビューを返します。

はつまり、彼らは既存のコレクションに、その場で作業し、彼らはすべてのブール値を返す、私はそれがそのように働いていた希望が、これらのすべての操作が実際に破壊的Guava Explained ->Collection Utilities ->Sets