Javaは、2つのセットに交差があるかどうかを判断し、交差を取得する方法

1. Java は 2 つのセットに交差があるかどうかを判断します

1、コレクション.disjoint

完全修飾名は java.util.Collections で、2 つのコレクションが交差しない場合は true を返し、そうでない場合は false を返します。

例えば:

List<String> firstList = Arrays.asList("teacher", "worker", "student");
List<String> secondList = Arrays.asList("user", "admin");

if (Collections.disjoint(firstList, secondList)) {
    
    
    System.out.println("Collections.disjoint方法:firstList、secondList没有交集");
}

結果:
ここに画像の説明を挿入

2、CollectionUtils.containsAny

完全修飾名: org.apache.commons.collections.CollectionUtils. 2 つのコレクションが交差する場合は true を返し、交差しない場合は false を返します。これは、Collections.disjoint の反対です。

例えば:

List<String> firstList = Arrays.asList("teacher", "worker", "student");
List<String> secondList = Arrays.asList("user", "admin");

if (CollectionUtils.containsAny(firstList, secondList)) {
    
    
    System.out.println("CollectionUtils.containsAny方法:firstList、secondList有交集");
} else if (!CollectionUtils.containsAny(firstList, secondList)) {
    
    
    System.out.println("CollectionUtils.containsAny方法:firstList、secondList没有交集");
}

結果:
ここに画像の説明を挿入

3、CollectionUtil.containsAny

完全修飾名: cn.hutool.core.collection.CollectionUtil. ​​2 つのコレクションが交差する場合は true を返し、交差しない場合は false を返します。これは、Collections.disjoint の反対です。

例えば:

 List<String> firstList = Arrays.asList("teacher", "worker", "student");
 List<String> secondList = Arrays.asList("user", "admin");

 if (CollectionUtil.containsAny(firstList, secondList)) {
    
    
     System.out.println("CollectionUtil.containsAny方法:firstList、secondList有交集");
 } else if (!CollectionUtil.containsAny(firstList, secondList)) {
    
    
     System.out.println("CollectionUtil.containsAny方法:firstList、secondList没有交集");
 }

結果:
ここに画像の説明を挿入

4. Java8 の新機能を使用する

2 つのコレクションが交差するかどうかを取得する Java8 には、次の 2 つの方法があります。

List<String> firstList = Arrays.asList("teacher", "worker", "student");
List<String> secondList = Arrays.asList("user", "admin");

//方式一
//List<String> resultList = firstList.stream().filter((firstItem) -> secondList.contains(firstItem)).collect(Collectors.toList());

//方式二
List<String> resultList = firstList.stream().filter(secondList::contains).collect(Collectors.toList());
if (resultList != null && resultList.size() > 0) {
    
    
    System.out.println("firstList、secondList有交集");
} else {
    
    
    System.out.println("firstList、secondList没有交集");
}

結果:
ここに画像の説明を挿入

2. 2 つの集合の交点を取得する

1. for ループを使用する

例えば:

public static void main(String[] args) {
    
    
    List<String> firstList = Arrays.asList("teacher", "worker", "student", "driver");
    List<String> secondList = Arrays.asList("user", "admin", "student", "driver");

    List<String> resultList = new ArrayList<>();
    for (String item : firstList) {
    
    
        if (secondList.contains(item)) {
    
    
            resultList.add(item);
        }
    }
    System.out.println(resultList);
}

結果:
ここに画像の説明を挿入

2 つのコレクションに重複する要素がある場合、次の場合、この方法で取得された結果は重複排除されません。
ここに画像の説明を挿入

消す:
ここに画像の説明を挿入

重量を追加したい場合は、追加できます
ここに画像の説明を挿入

最終的なコード:

public static void main(String[] args) {
    
    
    List<String> firstList = Arrays.asList("teacher", "worker", "student", "driver", "driver");
    List<String> secondList = Arrays.asList("user", "admin", "student", "driver", "driver");

    List<String> resultList = new ArrayList<>();
    for (String item : firstList) {
    
    
        if (secondList.contains(item) && !resultList.contains(item)) {
    
    
            resultList.add(item);
        }
    }
    System.out.println(resultList);
}

このようにして得られた結果が重複排除です。
ここに画像の説明を挿入

HashSet を使用して重複排除することもできます
ここに画像の説明を挿入

結果:
ここに画像の説明を挿入

2. Java8 の forEach を使用する

例えば:

public static void main(String[] args) {
    
    
    List<String> firstList = Arrays.asList("teacher", "worker", "student", "driver");
    List<String> secondList = Arrays.asList("user", "admin", "student", "driver");

    List<String> resultList = new ArrayList<>();
    if (firstList == null) {
    
    
        throw new RuntimeException("firstList为空!");
    }
    
    firstList.forEach((firstItem) -> {
    
    
        if (secondList.contains(firstItem)) {
    
    
            resultList.add(firstItem);
        }
    });
    System.out.println(resultList);
}

結果:
ここに画像の説明を挿入

2 つのセットに同じ要素がある場合
ここに画像の説明を挿入

「2.1」同様、重複排除不可
ここに画像の説明を挿入

方法も上と同じ
ここに画像の説明を挿入

結果:
ここに画像の説明を挿入

または、「2.1」と同じ HashSet を使用します。

3. Java8 の新機能を使用する

"1.4" のように、2 つのセットの交点を取得するには 2 つの方法があります。

コードは以下のように表示されます:

public static void main(String[] args) {
    
    
    List<String> firstList = Arrays.asList("teacher", "worker", "student");
    List<String> secondList = Arrays.asList("user", "admin", "student");

    //方式一
    List<String> resultList = firstList.stream().filter((firstItem) -> secondList.contains(firstItem)).collect(Collectors.toList());

    //方式二
    //List<String> resultList = firstList.stream().filter(secondList::contains).collect(Collectors.toList());
    System.out.println(resultList);
}

結果:
ここに画像の説明を挿入

「2.1」や「2.2」のように、繰り返し要素を削除することもできません
ここに画像の説明を挿入

結果:
ここに画像の説明を挿入

distinct を追加すると、
ここに画像の説明を挿入
結果の重複を排除できます。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/studio_1/article/details/129873235