【发布时间】:2019-09-18 12:13:37
【问题描述】:
尝试按名字的第一个字母过滤学生的 ArrayList。 char 值是用户定义的。
我尝试将 char 更改为字符串并使用显示“”而不是 char firstLetter。
ArrayList<Student> studentList = new ArrayList<>(Arrays.asList(students));
System.out.println("Please enter the first letter a students name: ");
firstLetter = keyboard.nextLine().charAt(0);
Student student1 = student.stream().filter(x -> x.getFirstName().indexOf(firstLetter) == 0)
.map(Student::getFirstName).findAny().orElse(Null);
目标是从数组中打印学生列表,其名称以用户输入的字母开头。获取 char 不能被取消引用错误。
【问题讨论】:
-
您的 IDE 可能在
firstLetter.equals(x.getFirstName())上向您发出警告。这种比较没有多大意义。提示:获取名字的第一个字符/字母。 -
Student student = studentList.stream().filter(x -> firstLetter.equals(x.getFirstName())) .map(Student::getFirstName).findAny().orElse(Null);正在返回Student::getFirstName的类型(可能是String),而不是Student -
@Ezequiel 这是否意味着我应该使用 (String::getFistName)?当我尝试它创建一个无效的方法引用时。
-
这意味着代码无法编译。为了使其可编译,您的代码应类似于 'String studentFirstName = student.stream() .filter(x -> x.getFirstName().indexOf(firstLetter) == 0) .map(Student::getFirstName).findAny() .orElse(null);'.无论如何,这不是你所期望的。您需要一个学生列表,因此请尝试以下提供的解决方案。
标签: java java-stream