Javaのcontainsメソッドは、一部一致か完全一致か?
containsメソッドについて実験中です。
リストの場合と単体の場合で、containsメソッドの動作は違う
結論から言うと、リストのcontainsメソッドは完全一致かどうかを判定します。これに対して、Stringのcontainsメソッドは部分一致かどうかを判定します。
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
// リストのcontainsメソッドは完全一致かどうかを判定する
List<String> strList = new ArrayList<>();
strList.add("名古屋君");
strList.add("千葉君");
if(strList.contains("千葉")){
System.out.println("千葉はいます。");
} else {
System.out.println("千葉はいません。");
}
if(strList.contains("千葉君")){
System.out.println("千葉君はいます。");
} else {
System.out.println("千葉君はいません。");
}
// Stringのcontainsメソッドは部分一致かどうかを判定する
String s = "千葉君";
if(s.contains("千葉")){
System.out.println("千葉はいます。");
} else {
System.out.println("千葉はいません。");
}
if(s.contains("千葉君")){
System.out.println("千葉君はいます。");
} else {
System.out.println("千葉君はいません。");
}
}
}
(実行結果)
千葉はいません。
千葉君はいます。
千葉はいます。
千葉君はいます。
上記コードを確認する場合は、このサイトが便利です。
独自クラスのリストで、containsを使う
import java.util.*;
import java.util.stream.Collectors;
class Person {
String name;
String address;
}
public class Main {
public static void main(String[] args) throws Exception {
List<Person> personList = new ArrayList<>();
Person person_1 = new Person();
person_1.name = "太田牛一";
person_1.address = "東京";
personList.add(person_1);
Person person_2 = new Person();
person_2.name = "千葉君";
person_2.address = "千葉";
personList.add(person_2);
if(personList.contains("千葉")){
System.out.println("千葉はいます。");
} else {
System.out.println("千葉はいません。");
}
if(personList.contains("千葉君")){
System.out.println("千葉君はいます。");
} else {
System.out.println("千葉君はいません。");
}
// リストからメンバ変数が完全一致しているものを
List<String> nameList = personList.stream().map(s -> s.name).collect(Collectors.toList());
if(nameList.contains("千葉")){
System.out.println("千葉はいます。");
} else {
System.out.println("千葉はいません。");
}
if(nameList.contains("千葉君")){
System.out.println("千葉君はいます。");
} else {
System.out.println("千葉君はいません。");
}
//
}
}
(実行結果)
千葉はいません。
千葉君はいません。
千葉はいません。
千葉君はいます。
