1. 概述
在这个快速教程中,我们将学习如何使用Java 8 Stream根据另一个列表中的值从一个列表中查找元素。
2. 使用Java 8 Stream
让我们从两个实体类开始-Employee和Department:
class Employee {
Integer employeeId;
String employeeName;
// getters and setters
}
class Department {
Integer employeeId;
String department;
// getters and setters
}
这里的想法是根据Department对象列表过滤Employee对象列表。更具体地说,我们希望从列表中找到所有Employee:
- 将“sales”作为他们的部门,并且
- 在Department的列表中有相应的employeeId
为了实现这一点,我们实际上会在另一个列表中过滤一个:
@Test
public void givenDepartmentList_thenEmployeeListIsFilteredCorrectly() {
Integer expectedId = 1002;
populate(emplList, deptList);
List<Employee> filteredList = emplList.stream()
.filter(empl -> deptList.stream()
.anyMatch(dept ->
dept.getDepartment().equals("sales") &&
empl.getEmployeeId().equals(dept.getEmployeeId())))
.collect(Collectors.toList());
assertEquals(1, filteredList.size());
assertEquals(expectedId, filteredList.get(0).getEmployeeId());
}
填充完这两个列表后,我们只需将一个Employee的Stream对象传递给Department的Stream对象。
接下来,要根据我们的两个条件过滤记录,我们使用anyMatch谓词,在其中我们组合了所有给定的条件。
最后,我们将结果收集到filteredList中。
3. 总结
在本文中,我们学习了如何:
- 使用Collection#stream将一个列表的值流式传输到另一个列表中,并且
- 使用anyMatch()谓词组合多个过滤条件
与往常一样,本教程的完整源代码可在GitHub上获得。
Show Disqus Comments
Post Directory
扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章