我有两个类型字符串列表和一个对象(考虑employee)。字符串类型列表包含员工代码。这里我需要检查雇员列表是否有任何代码对象(属性)保存在字符串中。下面是我的员工类
public class Employee {
public String code;
public String id;
// getters, setters and constructor
}
在这里,我可以找到员工是否在给定的字符串列表(employeeusergrpcodes)中保存了代码。
public static void main(String[] args) {
final List<String> employeeUserGrpCodes= Arrays.asList("ABCWelcome","ABCPlatinum","SuperEmployee");
List<Employee> empList=new ArrayList<Employee>();
Employee k1= new Employee("KCAEmployee","1");
Employee k2 = new Employee("ABCWelcome","2");
empList.add(k1);
empList.add(k2);
List<Employee> empListN = empList.stream().filter(i->employeeUserGrpCodes.stream().anyMatch(j->j.equalsIgnoreCase(i.getCode()))).collect(Collectors.toList());
List<String>newEmpList = empList.stream().map(a->a.getCode()).collect(Collectors.toList()).stream().filter(employeeUserGrpCodes::contains).collect(Collectors.toList());
if(!empListN.isEmpty() || !newEmpList.isEmpty())
{
System.out.println("Employee have employeeUserGrpCodes");
}
}
在上面的代码中,这两种方法都可以工作,即list'emplistn'和list'newemplist'。有没有可能在 predicate 的帮助下做同样的事情,我可以很容易地将其放入字符串'anymatch'中,比如
Predicate<Employee> isEmpUserGroup = e -> e.getCode().equalsIgnoreCase(employeeUserGrpCodes.stream())
boolean isRequiredEmployee = empList.stream().anyMatch(isEmpUserGroup);
1条答案
按热度按时间imzjd6km1#
首先,为了知道雇员是否有employeeusergrpcodes,您不需要这两个列表,因为is emplistn不是空的newemplist也不是空的,因此我们只能使用这两个列表中的一个,然后,与 predicate 的使用相关,您已经在筛选表达式中使用了它们,您可以在员工列表中使用以下内容:
您可以注意到 predicate 也在使用另一个 predicate
c -> c.equalsIgnoreCase(e.getCode())
因此,如果您对employee列表测试 predicate ,您还可以替换if条件并避免使用临时列表,如下所示: