こんにちは、さるまりんです。
タイトルの通り、配列が特定の値を含むかをチェックしてみます。
List
とかSet
ならばcontains()
メソッドを呼ぶことでチェックをできます。
が、配列にはこのメソッドはありません。なので別の方法でチェックをします。
いくつかの方法があるのでまとめておきます。
1. 単純にループを回す
シンプルにループを回して配列の要素を一つずつチェックする方法です。
コードにするとこんな感じです。
String[] fruits = {"apple", "banana", "grape", "melon", "orange", "peach"};
boolean found = false;
String testValue = "grape";
for (String f : fruits) {
if (testValue.equals(f)) {
found = true;
break;
}
}
System.out.println("found? " + (found ? "yes" : "no"));
fruits
が値を持つ配列、testValue
にチェックする値を入れます。
found
がtrue
になっていれば、fruits
にtestValue
があるということです。
実行すると
found? yes
と表示されます。
2. List
のcontains()
メソッドを使う
上にも書いたように配列にはcotains()メソッドはないですがListにはあります。
なので、まず配列からListに変換してからメソッドを使ってチェックします。
コードはこんな感じになります。
String[] fruits = {"apple", "banana", "grape", "melon", "orange", "peach"};
String testValue = "grape";
List<String> listOfFruits = Arrays.asList(fruits);
boolean found = listOfFruits.contains(testValue);
System.out.println("found? " + (found ? "yes" : "no"));
実行すると
found? yes
と表示されます。
3. Stream APIのanyMatch()
メソッドを使う
配列からstream
を作って、anyMatch()
メソッドでチェックする方法です。
コードにしてみます。
String[] fruits = {"apple", "banana", "grape", "melon", "orange", "peach"};
String testValue = "grape";
boolean found = Arrays.stream(fruits).anyMatch(testValue::equals);
System.out.println("found? " + (found ? "yes" : "no"));
こちらも実行結果は同じ
found? yes
と表示されます。
4. ソート済みのリストをbinarySearch()
で探す
ソートされたリストであればArrays
クラスのbinarySearch()
メソッドで値が含まれているかチェックすることができます。
String[] fruits = {"apple", "banana", "grape", "melon", "orange", "peach"};
String testValue = "grape";
Arrays.sort(fruits); // 配列をソートします。
int index = Arrays.binarySearch(fruits, testValue); // 配列に値があるか?
boolean found = index >= 0; // indexが0以上であれば配列は値を含みます
System.out.println("found? " + (found ? "yes" : "no"));
結果は同じことなんですが、それぞれの方法でコードがシンプルになったり、速度が違ったりすると思うので、適切にやり方を選んでいけたらと思います。
読んでくださってありがとうございました。
それではまた!