Java - Setに特定の要素があるかどうかを確認する

Setに特定の値が存在するかどうかを確認する方法を紹介します。

1. contains() で特定の要素を確認する

以下のように Set.contains() は、引数として渡されたオブジェクトが Set 内にある場合は true、ない場合は false を返します。

import java.util.*;

public class Example {

    public static void main(String[] args) {

        Set<Integer> mySet = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));

        int item = 3;
        System.out.println(mySet.contains(item));

        item = 6;
        System.out.println(mySet.contains(item));
    }
}

Output:

true
false

1.1 Custom クラスを使用する Set で contains() を使用する

上記の例では、Javaが提供する基本クラスを使用しています。

Custom クラスのオブジェクトを持つ Set で contains() を使用するには、Custom クラスに equals()hashCode() を実装する必要があります。 これは、 contains() 内のオブジェクトを見つけるときに hashCode()equals() で同じオブジェクトかどうかを比較するからです。

以下の例は、Studentクラスのオブジェクトを持つSetからcontains()でオブジェクトが存在するかどうかを確認する例です。

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

public class Example2 {

    public static class Student {
        public String name;
        public int age;

        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        public boolean equals(Object o) {
            Student other = (Student) o;
            return name.equals(other.name) && age == other.age;
        }

        @Override
        public int hashCode() {
            return Objects.hash(name, age);
        }
    }


    public static void main(String[] args) {

        Set<Student> mySet = new HashSet<>();
        mySet.add(new Student("John", 10));
        mySet.add(new Student("Doe", 20));

        Student item = new Student("John", 10);
        System.out.println(mySet.contains(item));

        item = new Student("Jason", 10);
        System.out.println(mySet.contains(item));
    }
}

Output:

true
false

2. StreamのanyMatch()で特定の要素を確認する

以下のようにSetをStreamにし、 anyMatch()で特定の要素があるかどうかをチェックできます。

import java.util.*;

public class Example1 {

    public static void main(String[] args) {

        Set<Integer> mySet = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));

        final int item = 3;
        boolean contains = mySet.stream().anyMatch(i -> i == item);
        System.out.println(mySet.contains(item));
    }
}

Output:

true
codechachaCopyright ©2019 codechacha