2014-11-11 9 views
6

Voglio ottenere un flusso in una lista immutabile. Qual è la differenza tra i seguenti approcci e quale è meglio dal punto di vista delle prestazioni?Il modo migliore per raccogliere il flusso Java-8 su Guava ImmutableList

  1. collect(Collectors.collectingAndThen(Collectors.toList(), ImmutableList::copyOf));

  2. ImmutableList.copyOf(stream.iterator());

  3. collect(Collector.of( ImmutableList.Builder<Path>::new, ImmutableList.Builder<Path>::add, (l, r) -> l.addAll(r.build()), ImmutableList.Builder<Path>::build) );

Alcuni più parametri per le prestazioni o l'efficienza,

  1. Possono esserci molte voci nell'elenco/raccolta.

  2. Cosa fare se si desidera ordinare il set, utilizzando l'operazione intermedia ".sorted()" con un comparatore personalizzato.

  3. di conseguenza, che cosa succede se aggiungo .parallel() al flusso
+0

correlati: [Come posso raccogliere un flusso Java 8 in una Guava ImmutableCollection?] (Https: //stackoverflow.com/questions/29013250/how-can-i-collect-a-java-8-stream-into-a-guava-immutablecollection) –

risposta

2

Mi aspetto che 1) sia il più efficiente: passare attraverso i builder aggiuntivi sembra meno leggibile e improbabile che vinca rispetto al normale toList() e la copia dall'iteratore scarta le informazioni di dimensionamento.

(Ma Guava sta lavorando per aggiungere il supporto per Java 8 cose come questo, che si può solo aspettare per.)

+0

grazie, potresti elaborare "copia dall'iteratore rigetti di informazioni di ridimensionamento" – user3169330

+0

Un 'Stream.iterator()' non conosce la sua dimensione. Passando tramite 'toList()' ottieni una lista delle dimensioni. Tuttavia, potrebbe essere discusso in entrambi i casi - stai perdendo le informazioni sul dimensionamento quando costruisci l''Elenco', ma lo hai indietro quando lo copi in' ImmutableList'. –

3

Per le prestazioni del sistema, è necessario misurarla.

Per le prestazioni di programmazione, utilizzare il modo più chiaro. Dalla sola apparizione, mi piace di più la seconda, e non vedo evidenti inefficienze lì.

Problemi correlati