【发布时间】:2020-12-14 20:11:03
【问题描述】:
我有两个字符串类型列表和一个对象(考虑员工)。字符串类型列表有员工代码。在这里,我需要检查员工列表是否有任何代码(属性)对象保存在字符串中。下面是我的员工班
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' 这两种方法都有效。是否可以在 Predicates 的帮助下做同样的事情,我可以很容易地放入 String 'anymatch' like
Predicate<Employee> isEmpUserGroup = e -> e.getCode().equalsIgnoreCase(employeeUserGrpCodes.stream())
boolean isRequiredEmployee = empList.stream().anyMatch(isEmpUserGroup);
【问题讨论】:
-
1.
collect(Collectors.toList()).stream()在您的newEmpList中是多余的。 2. 尽管有映射,equalsIgnoreCase和contains之间还是存在细微差别,这在您实际处理区分大小写的输入时会很明显。 3.filter操作中的 lambda 表达式是Predicate<T>,其中T是 Stream 的类型,在您的情况下为Employee。 4. 所有这些都可以通过导航到 javadoc 本身来理解。
标签: java java-stream predicate