consente di dire che abbiamo questo pezzo noioso di codice che tutti abbiamo dovuto usare:Come utilizzare la chiamata di raccolta in Java 8?
ArrayList<Long> ids = new ArrayList<Long>();
for (MyObj obj : myList){
ids.add(obj.getId());
}
Dopo il passaggio a Java 8, mio IDE mi sta dicendo che posso sostituire questo codice con collect call
, e si auto-genera :
ArrayList<Long> ids = myList.stream().map(MyObj::getId).collect(Collectors.toList());
Tuttavia la sua dandomi questo errore:
collect(java.util.stream.Collector<? super java.lang.Long,A,R>) in Steam cannot be
applied to: (java.util.stream.Collector<T>, capture<?>, java.util.List<T>>)
ho provato gettando il parametro, ma la sua dandomi indefinita A
e R
e l'IDE non fornisce ulteriori suggerimenti.
Sono curioso di sapere come si può usare collect call
in questo scenario e non sono riuscito a trovare alcuna informazione che potesse guidarmi correttamente. Qualcuno può far luce?
In realtà il codice risultato non è più breve o molto più significativo di quello che abbiamo fatto prima di Java8, hmm e le prestazioni? – azerafati
@Bludream non si tratta di essere più brevi o più significativi, si tratta di introdurre un nuovo paradigma nella programmazione funzionale di Java. Questo ti permette di fare le cose in un modo molto diverso dalle precedenti iterazioni di Java. La programmazione funzionale ha le sue caratteristiche quando è necessario astrarre _behaviour_ piuttosto che _data_. Inoltre, questo sopra potrebbe essere un monotipo leggermente lungo; non era certamente possibile farlo in una riga in precedenza. –
Vedo, ma come l'OP cercavo anche qualcosa per sostituire i miei collezionisti che si diffondevano ovunque nel mio codice. – azerafati