Java 8 Streams: Finden Sie Elemente aus einer Liste basierend auf Werten aus einer anderen Liste

Java 8-Streams: Suchen von Elementen aus einer Liste basierend auf Werten aus einer anderen Liste

1. Überblick

In diesem kurzen Tutorial lernen wir, wie manfind items from one list based on values from another list using Java 8 Streams macht.

2. Verwenden von Java 8-Streams

Beginnen wir mit zwei Entitätsklassen -Employee andDepartment:

class Employee {
    Integer employeeId;
    String employeeName;

    // getters and setters
}

class Department {
    Integer employeeId;
    String department;

    // getters and setters
}

The idea here is to filter a list of Employee objects based on a list of Department objects. Insbesondere möchten wir alleEmployees  aus einer Liste finden, die:

  • haben "Vertrieb" als ihre Abteilung und

  • haben ein entsprechendesemployeeId in einer Liste vonDepartments

Und um dies zu erreichen, filtern wir tatsächlich ineinander:

@Test
public void givenDepartmentList_thenEmployeeListIsFilteredCorrectly() {
    Integer expectedId = 1002;

    populate(emplList, deptList);

    List 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());
}

Nachdem wir beide Listen ausgefüllt haben, übergeben wir einfach einen Stream vonEmployee -Objekten an den Stream vonDepartment-Objekten.

Next, to filter records based on our two conditions, we’re using the anyMatch predicate,, in dem wir alle gegebenen Bedingungen kombiniert haben.

Schließlich geben wircollect das Ergebnis infilteredList ein.

3. Fazit

In diesem Artikel haben wir gelernt, wie man:

  • Streamen Sie die Werte einer Liste mitCollection#stream and in die andere Liste

  • Kombinieren Sie mehrere Filterbedingungen mit demanyMatch() -Spredikat

Der vollständige Quellcode dieses Beispiels istover on GitHub verfügbar.