Quelle est la bonne façon de remplacer un imbriqués pour la boucle avec des flux en Java 8?

Lors de l'apprentissage de Java 8 les ruisseaux et les lambas, j'ai essayé de remplacer la suite de boucles for imbriquées avec des cours d'eau :

List<Long> deskIds = new ArrayList<>();
for(ProvidedService memberService : service.getAllNodesDepthFirst()){
   for(Desk d : memberService.getDesks()){
     deskIds.add(d.getId());
   }
}

Itération de la boucle une liste de "ProvidedService' objets, et pour chacun, on itère sur une propriété de liste de "Bureau" des objets, et en extrait le champ 'Id' pour une liste.

Je suis venu avec le code suivant à l'aide de flux :

List<Long> deskIds = new ArrayList<>();
service.getAllNodesDepthFirst().stream().forEach(srv -> {
    deskIds.addAll(srv.getDesks().stream().map(Desk::getId).collect(Collectors.toList()));
});

Est-ce le bon/meilleur moyen de le faire ? Ou est-il un moyen de le faire sans la deuxième instruction stream ?

  • Je pense que c'est très bien.Il n'y a pas de problème avec votre approche.
  • Pour plus de vérifier ce lien: oracle.com/technetwork/articles/java/...
  • oui mon approche a travaillé, mais il a été abit naïf et je croyais qu'il devrait y avoir une façon de le simplifier, comme assylias démontré.
InformationsquelleAutor Pierre Henry | 2014-11-27