Java Streams调用filter内方法报错:无法将String转为boolean
问题解决:Stream filter方法引用类型不匹配错误
错误原因
stream().filter()方法要求传入的判断逻辑必须返回布尔值(boolean),用来决定是否保留当前元素。你用的Employee::filterData方法引用,对应的filterData()返回的是String类型,和filter需要的boolean类型不兼容,所以抛出类型转换错误。
两种解决方案
方案1:修改Employee类的filterData方法,让它返回boolean
把原来返回字符串的逻辑改成返回判断结果的布尔值:
public class Employee { // 其他代码不变 public boolean filterData(){ // 直接返回判断条件的结果 return empId == 111 && salary > 1000; } }
然后在Main类里这样调用:
// 过滤并收集符合条件的员工 List<Employee> filteredEmployees = employeeList.stream() .filter(Employee::filterData) .collect(Collectors.toList()); // 打印过滤结果 filteredEmployees.forEach(System.out::println);
方案2:不修改原类,直接在filter中写Lambda表达式
如果不想改动Employee类,直接在stream的filter里写判断逻辑:
List<Employee> filteredEmployees = employeeList.stream() .filter(emp -> emp.empId == 111 && emp.salary > 1000) .collect(Collectors.toList()); filteredEmployees.forEach(System.out::println);
额外提示
你原来代码里的map(employee->employee)完全多余,因为stream中的元素本身就是Employee类型,不需要做任何映射转换,可以直接删掉。
内容的提问来源于stack exchange,提问作者Niranjan Kumar
相关产品推荐
相关产品推荐

