Java8ストリーム:別のリストの値に基づいて、あるリストからアイテムを検索します
1. 概要
このクイックチュートリアルでは、Java 8ストリームを使用して、別のリストの値に基づいて1つのリストからアイテムを検索する方法を学習します。
2. Java8ストリームの使用
従業員と部門の2つのエンティティクラスから始めましょう。
class Employee {
Integer employeeId;
String employeeName;
// getters and setters
}
class Department {
Integer employeeId;
String department;
// getters and setters
}
- 部門として「営業」を持ち、
- 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オブジェクトのストリームをDepartmentオブジェクトのストリームに渡すだけです。
次に、2つの条件に基づいてレコードをフィルタリングするために、anyMatch述語を使用します。この述語内で、指定されたすべての条件を組み合わせています。
最後に、結果をcollectしてfilteredListにします。
3. 結論
この記事では、次の方法を学びました。
- Collection#s tream を使用して、一方のリストの値をもう一方のリストにストリーミングします。
- anyMatch()述語を使用して複数のフィルター条件を組み合わせる
この例の完全なソースコードは、GitHubでから入手できます。