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で利用可能]です。