predicate 在java中比较两个不同类型列表中的应用

n7taea2i  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(313)

我有两个类型字符串列表和一个对象(考虑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);
imzjd6km

imzjd6km1#

首先,为了知道雇员是否有employeeusergrpcodes,您不需要这两个列表,因为is emplistn不是空的newemplist也不是空的,因此我们只能使用这两个列表中的一个,然后,与 predicate 的使用相关,您已经在筛选表达式中使用了它们,您可以在员工列表中使用以下内容:

Predicate<Employee> employeePredicate = e -> employeeUserGrpCodes.stream().anyMatch(c -> c.equalsIgnoreCase(e.getCode()));
List<Employee> empListN = empList.stream().filter(employeePredicate).collect(Collectors.toList());

您可以注意到 predicate 也在使用另一个 predicate c -> c.equalsIgnoreCase(e.getCode()) 因此,如果您对employee列表测试 predicate ,您还可以替换if条件并避免使用临时列表,如下所示:

if (empList.stream().anyMatch(employeePredicate)) {
    System.out.println("Employee have employeeUserGrpCodes");
}

相关问题