J'essaie de migrer une fonction de java 7 vers java8 mais je suis bloqué sur l'obtention de la valeur de l'élément indexé lors de la boucle d'une liste. Quelle est la bonne façon de procéder?
voici le code que j'essaye de migrer:
List<Employe> listEmploye = new ArrayList<>(); for(int i=0; i< ids.size();i++) { Long idLong = Long.valueOf(ids.get(i)); BigDecimal idBig= BigDecimal.valueOf(idLong); listEmploye.add(findByIdPointage(idBig)); }
5 Réponses :
List<Employe> listEmploye = ids.stream() .map(BigDecimal::new) .map(this::findByIdPointage) .collect(Collectors.toList())
Il n'y a rien de mal avec votre approche actuelle, ce n'est pas parce que Java 8 introduit des lambdas et de nouvelles méthodes que vous devez les utiliser.
Si vous voulez utiliser des flux, vous pouvez le faire ci-dessous. Le mappage Long.valueOf ()
est potentiellement redondant:
List<Employe> listEmploye = ids.stream() .map(Long::valueOf) .map(BigDecimal::valueOf) .map(this::findByIdPointage) .collect(Collectors.toList())
Vous pouvez utiliser l'API Stream pour mapper votre collection:
List<Employe> listEmploye = ids.stream() .map(Long::valueOf) .map(BigDecimal::valueOf) .map(this::findByIdPointage) .collect(Collectors.toList());
public List<Employee> getEmployees(Set<String> ids) { return ids.stream() .map(id -> BigDecimal.valueOf(Long.parseLong(id))) .map(this::findByIdPointage) .collect(Collectors.toList()); }
Vous n'avez pas besoin d'utiliser des flux pour cette tâche, mais vous pouvez améliorer votre boucle for
si vous le souhaitez:
List<Employe> listEmploye = new ArrayList<>(); ids.forEach(id -> listEmploye.add(findByIdPointage(new BigDecimal(id))));
Quel type est la collection d'identifiants?
le type de liste d'identifiants est String