Sto passando da orribili nidificati per loop a espressioni lambda disegnate in java.Lambda Raccogliere gli elementi creati all'interno di un metodo di consumo
Ecco il mio codice vero e proprio
for (String foo : foos) {
for (Bar bar : bars) {
if (bar.getFoo().equals(foo)) {
FooBar fooBar = new FooBar();
fooBar.setBar(bar);
listOfFooBar.add(fooBar);
break;
}
}
}
Il mio codice lambda effettivo per sostituire il codice sopra
foos.forEach(i -> bars.stream().filter(p -> p.getFoo().equals(i)).findFirst().ifPresent(p -> {
FooBar s = new FooBar();
fooBar.setBar(bar);
listOfFooBar.add(fooBar);
}));
La mia domanda è, c'è un modo per popolare listOfFooBar
con qualche tipo di raccolta() metodo?
Qualcosa di simile listOfFooBar = foos.forEach(.....).collect(Collectors.toList());
Un fatto è che le barre conterrà sempre tutti i foo, Foos è fondamentalmente una piccola parte di bar.
Se c'è un modo migliore (in termini di prestazioni o eleganza) di fare quel lambda, si prega di condividere.
Penso che dovrebbe essere 'bar.getFoo()' invece di 'bar.getBar()', corretto? –
@FedericoPeraltaSchaffner sì, questo ha più senso :) –
Perché mai tutti cercano di fare tutto con 'forEach' prima? 'Stream' ha più metodi di quello. – Holger