gpt4 book ai didi

stream - 根据某些条件添加过滤器 java 8

转载 作者:行者123 更新时间:2023-12-04 12:51:28 24 4
gpt4 key购买 nike

我需要根据一些参数(如 firstName 、 lastName 等)过滤员工列表。这些参数是用户定义的,用户可以选择所有过滤器或过滤器组合。

public List<Employee> getFilterList(String firstName,String lastName)
{
List<Employee> empList = empRepository.getEmployees();

Stream<Employee> empStream=empList.stream();

if(firstName!=null)
{
empStream= empStream.filter(e-> e.getFirstname().equals(firstName))
}

if(lastName!=null)
{
empStream= empStream.filter(e-> e.getlastName().equals(lastName))
}

return empStream.collect(Collectors.toList());
}

这是这样做的正确方法吗?

注:上面的代码工作正常,我只是在寻找另一种更好的方法(如果有的话)。

案例 1: getFilterList(null,null)所有员工的返回列表

案例2: getFilterList("abc",null)返回名字为 abc 的所有员工的列表。

最佳答案

它显示列表 empList根据firstName的参数过滤或过滤根据参数lastName ,代码模式几乎相同。所以我想出了下面的代码。

public List<Employee> getFilterList(String firstName,String lastName){

List<Employee> empList = empRepository.getEmployees();

return empList.stream().filter(getPredicateBiFun.apply(firstName,Employee::getFirstName))
.filter(getPredicateBiFun.apply(lastName,Employee::getLastName))
.collect(Collectors.toList());

}

看起来更像Java8风格。这是一个静态属性 getPredicateBiFun你看哪个可以得到对应的 Predicate<Employee>根据参数表达式。所以它只是一个 BiFunction和我们想要的一个很好的模式。
private static BiFunction<String, Function<Employee, String>, Predicate<Employee>> getPredicateBiFun = (name, getNameFun) -> employee -> name == null ? true : name.equals(getNameFun.apply(employee));

就这样 :)

关于stream - 根据某些条件添加过滤器 java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37065571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com