2015-10-08 22 views
5

C'è una, forse un modo più conciso di linea, per scrivere il seguente:Java 8 modo di aggiungere elementi in

ArrayList<Integer> myList = new ArrayList<>(); 
for (int i = 0; i < 100; i++){ 
    myList.add(i); 
} 

utilizzando Java 8 caratteristiche e approcci funzionalmente insipred. Non mi aspetto una soluzione Haskell come:

ls = [1..100] 

Ma qualcosa di più elegante del tradizionale stile imperativo.

risposta

6

Una soluzione è

List<Integer> list = IntStream.range(0, 100).boxed().collect(Collectors.toCollection(ArrayList::new)); 

I passi:

  1. IntStream.range(0, 100) è un flusso di 100 primitive int s.
  2. boxed() trasforma questo in uno stream di oggetti Integer. Questo è necessario per inserire i numeri in un Collection.
  3. collect(Collectors.toCollection(ArrayList::new)); è come si converte un Stream in un ArrayList. È possibile sostituire ArrayList::new da qualsiasi fornitore per una raccolta e gli elementi verranno aggiunti a tale raccolta.
+0

Puoi spiegare ogni passaggio nella "pipeline"? – Michael

+0

@ Michael Che passo non capisci? Hai controllato la sua documentazione? – Pshemo

+0

Per essere onesti, l'intera espressione. Non ho mai visto 'IntStream' prima, ma soprattutto la parte che inizia con' boxed' in poi @Pshemo – Michael

Problemi correlati