Java 8 Streams: recherche d’éléments dans une liste à partir de valeurs provenant d’une autre liste

Java 8 Streams: recherche d'éléments dans une liste à partir de valeurs provenant d'une autre liste

1. Vue d'ensemble

Dans ce rapide didacticiel, nous allons apprendre à utiliserfind items from one list based on values from another list using Java 8 Streams.

2. Utilisation des flux Java 8

Commençons par deux classes d'entités -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. Plus spécifiquement, nous voulons trouver tous lesEmployees  d'une liste qui:

  • avoir «ventes» comme département et

  • avoir unemployeeId correspondant dans une liste deDepartments

Et pour y parvenir, nous allons en fait filtrer l'un dans l'autre:

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

Après avoir rempli les deux listes, nous passons simplement un Stream deEmployee objects au Stream des objetsDepartment.

Next, to filter records based on our two conditions, we’re using the anyMatch predicate, dans lequel nous avons combiné toutes les conditions données.

Enfin, nouscollect le résultat enfilteredList.

3. Conclusion

Dans cet article, nous avons appris à:

  • Flux des valeurs d'une liste dans l'autre liste à l'aide du sableCollection#stream 

  • Combinez plusieurs conditions de filtre à l'aide du spredicateanyMatch() 

Le code source complet de cet exemple est disponibleover on GitHub.