Javaで配列に値が存在するかどうかを確認する
この記事では、Java で配列に値が存在するかどうかを確認する方法について説明します。配列に指定された要素が含まれている場合、ソリューションは true を返す必要があります。それ以外の場合は false。
1.中間リストの使用
使用できます Arrays.asList()
アレイに裏打ちされたリストを取得し、 List::contains
値がリストに存在するかどうかを判別するメソッド。
1 2 3 4 5 6 7 8 9 10 11 12 |
import java.util.Arrays; public class Main { public static void main(String[] args) { String[] values = {"B", "A", "C", "D", "E"}; String target = "A"; boolean found = Arrays.asList(values).contains(target); System.out.println(found); // true } } |
上記の解決策は、プリミティブのアレイでは機能しません。 Guavaライブラリをご希望の場合は、 Ints.asList()
プリミティブのメソッド。
1 2 3 4 5 6 7 8 9 10 11 12 |
import com.google.common.primitives.Ints; public class Main { public static void main(String[] args) { int[] values = {4, 3, 6, 8, 5}; int target = 6; boolean found = Ints.asList(values).contains(target); System.out.println(found); // true } } |
2.中間セットの使用
または、アレイ要素からセットを作成して、 Set::contains
指定された値がその中に存在するかどうかを判断する方法。これは、文字列アレイについて以下に示されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.util.Arrays; import java.util.HashSet; import java.util.Set; public class Main { public static<T> boolean contains(T[] values, T target) { Set<T> set = new HashSet<>(Arrays.asList(values)); return set.contains(target); } public static void main(String[] args) { String[] values = {"B", "A", "C", "D", "E"}; String target = "A"; boolean found = contains(values, target); System.out.println(found); // true } } |
Java8ストリームを使用したプリミティブアレイの例を次に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import java.util.Arrays; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { int[] values = {5, 3, 4, 7, 6, 8}; int target = 4; boolean found = Arrays.stream(values) .boxed() .collect(Collectors.toSet()) .contains(target); System.out.println(found); // true } } |
3. Apache CommonsLangLibraryの使用
を活用することもできます ArrayUtils.contains()
Apache Commons Langライブラリによって提供されるメソッド。アレイに指定された値が含まれている場合、trueを返します。すべてのプリミティブタイプとオブジェクトアレイに対してオーバーロードされます。
1 2 3 4 5 6 7 8 9 10 11 12 |
import org.apache.commons.lang3.ArrayUtils; public class Main { public static void main(String[] args) { String[] values = {"B", "A", "C", "D", "E"}; String target = "A"; boolean found = ArrayUtils.contains(values, target); System.out.println(found); // true } } |
4.使用する Stream.anyMatch()
方法
Java 8以降では、ストリームを作成し、ストリームのいずれかの要素が指定された要素と一致するかどうかを確認できます anyMatch()
方法。これは、文字列アレイについて以下に示されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.util.Arrays; public class Main { public static<T> boolean contains(T[] values, T target) { return Arrays.stream(values).anyMatch(target::equals); } public static void main(String[] args) { String[] values = {"B", "A", "C", "D", "E"}; String target = "A"; boolean found = contains(values, target); System.out.println(found); // true } } |
プリミティブアレイの場合は、 ==
指定された要素と一致する演算子。
1 2 3 4 5 6 7 8 9 10 11 12 |
import java.util.Arrays; public class Main { public static void main(String[] args) { int[] values = {5, 3, 2, 6, 3, 7}; int target = 2; boolean found = Arrays.stream(values).anyMatch(i -> i == target); System.out.println(found); // true } } |
5.使用する Stream.filter()
方法
別のアプローチは 指定されたアレイをストリームに変換します を使用して、指定された要素のすべての出現をフィルタリングします filter()
方法。次に、 findFirst()
を返すメソッド Optional
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.util.Arrays; import java.util.Optional; public class Main { public static<T> boolean contains(T[] values, T target) { return Arrays.asList(values).stream() .filter(x -> x.equals(target)) .findFirst() .isPresent(); } public static void main(String[] args) { String[] values = {"B", "A", "C", "D", "E"}; String target = "A"; boolean found = contains(values, target); System.out.println(found); // true } } |
また、 count()
アレイ内の指定された要素の数を取得するメソッド:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.util.Arrays; public class Main { public static<T> boolean contains(T[] values, T target) { return Arrays.asList(values).stream() .filter(x -> x.equals(target)) .count() > 0; } public static void main(String[] args) { String[] values = {"B", "A", "C", "D", "E"}; String target = "A"; boolean found = contains(values, target); System.out.println(found); // true } } |
プリミティブアレイの場合は、 ==
比較のための演算子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.util.Arrays; public class Main { public static boolean contains(int[] values, int target) { return Arrays.stream(values) .filter(x -> x == target) .count() > 0; } public static void main(String[] args) { int[] values = {5, 3, 4, 7, 6, 8}; int target = 4; boolean found = contains(values, target); System.out.println(found); // true } } |
Java で配列に値が存在するかどうかを確認する方法は以上です。