扫描teacherList并查找输入的教师姓名(teacherName)是否匹配,可以使用以下方法之一。请注意,每个方法都将 teacherList 和 enteredName 作为参数并返回 boolean true 或 false - 取决于是否找到匹配项。
共有三种方法,每种方法的执行方式不同。请注意第三个构造 C - 它使用与前两个不同的方法 - A 和 B。
方法一:
使用 for 循环迭代 teacherList 并查找是否有名称匹配的老师:
for (Teacher teacher : teacherList) {
if (teacher.getName().equals(enteredName)) {
// a match is found
return true;
}
}
return false;
方法B:
这与方法 A 具有相同的功能,但使用不同的代码构造 - 流和 lambda:
boolean enteredTeacherExists = teacherList.stream()
.anyMatch(teacher -> teacher.getName().equals(enteredName));
语法teacher -> teacher.getName().equals(enteredName) 是Predicate<Teacher> 类型的lambda 表达式。
方法C:
此方法使用不同的方法。代替测试教师的姓名 - 使用输入的姓名构造教师对象,并且该对象用于查找匹配项。
根据输入的名字创建一个教师并测试它是否存在于列表中。
Teacher enteredTeacher = new Teacher(enteredName);
boolean enteredTeacherExists = teacherList.contains(enteredTeacher);
如果列表中存在同名教师,则返回值为真,否则为假。
注意Teacher 类(参见下面的定义)有一个java.lang.Object 类的覆盖equals() 方法。此方法指定两个教师对象相等的标准 - 如果它们的名称相同,则认为教师对象相等。这允许使用等于List 的contains 方法。
守则:
Teacher.java:
public class Teacher {
private String name;
public Teacher(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
/* This returns a string representation of the teacher - the name. */
public String toString() {
return name;
}
@Override
public boolean equals(Object other) {
if ((other != null) && (other instanceof Teacher)) {
Teacher otherTeacher = (Teacher) other;
if (otherTeacher.getName().equals(this.name)) {
return true;
}
}
return false;
}
}
TeacherTester.java
public class TeacherTester {
public static void main(String [] args) {
// Create some teachers
Teacher teacher1 = new Teacher("first");
Teacher teacher2 = new Teacher("second");
Teacher teacher3 = new Teacher("third");
List<Teacher> teacherList = Arrays.asList(teacher1, teacher2, teacher3);
System.out.println("Teachers: " + teacherList);
// Look for teacher - using method A
String enteredName = "ninth";
System.out.println("A. Found " + enteredName + " : " + findTeacherA(teacherList, enteredName));
enteredName = "first";
System.out.println("A. Found " + enteredName + " : " + findTeacherA(teacherList, enteredName));
// Look for teacher - using method B
enteredName = "ninth";
System.out.println("B. Found " + enteredName + " : " + findTeacherB(teacherList, enteredName));
enteredName = "second";
System.out.println("B. Found " + enteredName + " : " + findTeacherB(teacherList, enteredName));
// Look for teacher - using method C
enteredName = "third";
System.out.println("C. Found " + enteredName + " : " + findTeacherC(teacherList, enteredName));
enteredName = "ninth";
System.out.println("C. Found " + enteredName + " : " + findTeacherC(teacherList, enteredName));
}
private static boolean findTeacherA(List<Teacher> teacherList, String enteredName) {
for (Teacher teacher : teacherList) {
if (teacher.getName().equals(enteredName)) {
// a match is found
return true;
}
}
return false;
}
private static boolean findTeacherB(List<Teacher> teacherList, String enteredName) {
return teacherList.stream()
.anyMatch(teacher -> teacher.getName().equals(enteredName));
}
private static boolean findTeacherC(List<Teacher> teacherList, String enteredName) {
Teacher enteredTeacher = new Teacher(enteredName);
return teacherList.contains(enteredTeacher);
}
}
输出:
Teachers: [first, second, third]
A. Found ninth : false
A. Found first : true
B. Found ninth : false
B. Found second : true
C. Found third : true
C. Found ninth : false