微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – Stream类型中的方法过滤器(Predicate <?super Employee>)不适用于参数((e) - > {})

如何在过滤器中设置 Java 8中的值?我想将emailId设置为null,其中firstName是Raj.我怎么能在Java8中做到这一点?

public class EmployeeDemo {
    public static void main(String[] args) {
        Employee e1 = new Employee("John","Kerr","john.kerr@gmail.com");
        Employee e2 = new Employee("Parag","Rane","john.kerr@gmail.com");
        Employee e3 = new Employee("Raj","Kumar","john.kerr@gmail.com");
        Employee e4 = new Employee("Nancy","Parate","john.kerr@gmail.com");

        List<Employee> employees = new ArrayList<>();
        employees.add(e1);
        employees.add(e2);
        employees.add(e3);
        employees.add(e4);

        employees.stream().filter(e -> {
            if(e.getFirstName().equals("Raj")) {
                e.setEmail(null);
            }
        }).
    }
}

解决方法

Filter方法应该返回boolean,我认为不应该有任何副作用.在你的情况下,简单的循环将完成工作:

for(Employee employee: employees) {
    if(e.getFirstName().equals("Raj")) {
        e.setEmail(null);
    }
}

但如果你真的想使用流:

employees.stream() //get stream
    .filter(e -> e.getFirstName().equals("Raj")) //filter entries with first name Raj
    .forEach(e -> e.setEmail(null)); //for each of them set email to null

或者(如果你想处理整个列表并且返回的所有条目都改变了:

employees.stream() //get stream
    .map(e -> {
        if(e.getFirstName().equals("Raj")) {
            e.setEmail(null);
        }
        return e;
    })
    .collect(Collectors.toList());

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐