Java 8 Streams:他のリストの値に基づいてあるリストから項目を見つける
1概要
このクイックチュートリアルでは、https://www.baeldung.com/java-8-streams-introduction[Java 8 Streams]** を使用して、別のリストの値に基づいて1つのリストの項目を検索する方法を学習します。
2 Java 8 Streamsの使い方
2つのエンティティクラス
__Employee
と
Department__から始めましょう
class Employee {
Integer employeeId;
String employeeName;
//getters and setters
}
class Department {
Integer employeeId;
String department;
//getters and setters
}
-
ここでの考え方は、
Department
オブジェクトのリストに基づいて
Employee
オブジェクトのリストをフィルタ処理することです。 -
部署として「売上」がある
-
__Department
sのリストに対応する
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に渡すだけです。
-
次に、2つの条件に基づいてレコードをフィルタ処理するために、
anyMatch
述語を使用しています。
最後に、結果を
filteredList
に収集します。
3結論
この記事では、次のことを学びました。
-
を使って一方のリストの値をもう一方のリストに流す
__Collection#stream
and
**
anyMatch()
__predicateを使用して複数のフィルター条件を組み合わせる
この例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/core-java-collections[GitHubで利用可能]です。