You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Predicate筛选符合指定属性条件的对象列表

错误原因

代码存在两处核心问题,导致无法正常调用方法和完成筛选:

  • Predicate泛型绑定错误:声明的Predicate<ArrayList<emp>>表示判断入参是整个员工列表对象,ArrayList类本身没有定义getSalary()方法,该方法属于自定义员工类emp,因此编译阶段就会报错无法调用。
  • 筛选逻辑使用错误:Predicate是用来校验单个对象是否满足匹配规则的函数式接口,不能直接传入集合完成批量筛选,要从集合中捞出所有符合条件的元素,需要配合Stream流的过滤方法使用。
修正方案
  1. 首先确认自定义的emp类(Java编码规范建议类名使用大驼峰格式,可重命名为Emp)已经实现了getSalary()方法,否则无法读取实例的薪资属性。
  2. 将Predicate的泛型类型改为单个员工类型emp,让lambda入参代表单个员工实例,此时即可正常调用getSalary()方法编写判断逻辑。
  3. 借助Stream流的filter()方法传入Predicate规则,遍历集合筛选出所有符合条件的员工,最终收集为结果列表。
可运行完整代码
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

// 员工实体类
class Emp {
    private String name;
    private int id;
    private int salary;
    private String dept;

    public Emp(String name, int id, int salary, String dept) {
        this.name = name;
        this.id = id;
        this.salary = salary;
        this.dept = dept;
    }

    // 必须提供getter方法才能访问私有属性salary
    public int getSalary() {
        return salary;
    }

    // 重写toString方便打印结果
    @Override
    public String toString() {
        return "Emp{name='" + name + "', salary=" + salary + ", dept='" + dept + "'}";
    }
}

public class EmpFilterTest {
    public static void main(String[] args) {
        ArrayList<Emp> list = new ArrayList<>();
        list.add(new Emp("Ronaldo",1,90000,"UTD"));
        list.add(new Emp("Rooney",2,40000,"HOME"));

        // 正确声明Predicate:泛型为单个员工类型,判断单个员工薪资是否大于50k
        Predicate<Emp> highSalaryPredicate = emp -> emp.getSalary() > 50000;

        // 流式处理筛选符合条件的员工
        List<Emp> highSalaryEmps = list.stream()
                .filter(highSalaryPredicate)
                .collect(Collectors.toList());

        // 打印结果
        System.out.println(highSalaryEmps);
    }
}
运行结果
[Emp{name='Ronaldo', salary=90000, dept='UTD'}]

成功筛选出所有薪资大于50k的员工对象。

内容的提问来源于stack exchange,提问作者rajput

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:31:03