2016-03-18 15 views
9

Esiste un modo migliore per farlo in Java 8?Java-8 addAll Objects

final List<InstitutionUserConnection> allInstitutionUserConnections = new ArrayList<>(); 
for (final Institution institution : institutionsOfUser) { 
    allInstitutionUserConnections 
     .addAll(institutionUserConnectionService.getActiveInstitutionUserConnectionsByInstitution(institution)); 
} 

risposta

4

Invece di mappatura piatta della lista interna a un ruscello, è anche possibile mappare direttamente a un elenco, e quindi utilizzare un raccoglitore personalizzato per aggiungere l'elemento. Il vantaggio dell'utilizzo di un raccoglitore sopra l'utilizzo del flusso è che utilizzando un raccoglitore è possibile ottenere prestazioni più elevate perché utilizza 1 chiamata grande addAll anziché chiamate separate piccole add come Collectors.toList().

Una soluzione basata su questo appare come:

List<InstitutionUserConnection> result = institutionsOfUser.stream(). 
     .map(institutionUserConnectionService::getActiveInstitutionUserConnectionsByInstitution) 
     .collect(Collector.of(ArrayList::new, List::addAll, 
       (left, right) -> { left.addAll(right); return left; })); 
7

Sì, questo è ciò che l'operazione flatMap è per:

List<InstitutionUserConnection> allInstitutionUserConnections = 
    institutionsOfUser.stream() 
         .flatMap(institution -> institutionUserConnectionService.getActiveInstitutionUserConnectionsByInstitution(institution).stream()) 
         .collect(Collectors.toList()); 

Se il metodo genera un'eccezione verificata, allora avete bisogno di prenderlo e gestirlo con la registrazione, rethrowing un'eccezione incontrollata e/o restituire un valore predefinito.

List<InstitutionUserConnection> allInstitutionUserConnections = 
    institutionsOfUser.stream() 
         .flatMap(institution -> { 
          try { 
           return institutionUserConnectionService.getActiveInstitutionUserConnectionsByInstitution(institution).stream(); 
          } catch (TheCheckedThrownException e) { 
           // do something here, like throw an unchecked exception 
          } 
         }) 
         .collect(Collectors.toList()); 
+0

institutionUserConnectionService.getActiveInstitutionUserConnectionsByInstitution (istituzione) genera un'eccezione. C'è anche la possibilità di gestirlo? Molte grazie! – quma

+1

@ user3318489 Sì, vedere la mia modifica. – Tunaki