2015-05-09 17 views
12

Ho due liste come segueCome stampare insieme due elenchi usando Stream API java 8?

List<String> names = Arrays.asList("James","John","Fred"); 
List<Integer> ages = Arrays.asList(25,35,15); 

Quello che voglio fare è quello di stampare le due liste in questo modo

James:25 
John:35 
Fred:15 

E 'facile farlo utilizzando il modo classico

for(int i=0;i<names.size();i++){ 
    System.out.println(names.get(i)+":"+ages.get(i)); 
} 

C'è un modo per farlo usando Stream API java 8?

quello che sono in grado di fare è quello di stampare una sola lista unica

names.stream().forEach(System.out::println); 

risposta

14

Il modo più semplice è quello di creare un IntStream per generare gli indici, e quindi mappare ogni indice del String che si desidera creare .

IntStream.range(0, Math.min(names.size(), ages.size())) 
     .mapToObj(i -> names.get(i)+":"+ages.get(i)) 
     .forEach(System.out::println); 

Inoltre si potrebbe essere interessato a questo SO discussione Zipping streams using JDK8 with lambda (java.util.stream.Streams.zip), perché questo è il tipo di funzionalità che stai chiedendo.

1

Mentre Alexis C. risposta è corretta, si potrebbe sostenere che è il modo più semplice per ottenere un comportamento richiesto in Java 8. Propongo:

int[] i = {0}; 
names.forEach(name -> { 
    System.out.println(name + ages.get(i[0]++)); 
}); 

O anche senza indice:

List<Integer> agesCopy = new ArrayList<Integer>(ages); 
names.forEach(name -> { 
    System.out.println(name + agesCopy.remove(0)); 
}); 
+0

Grazie per il vostro aiuto, lo apprezzo +1;) – MChaker

+3

Penso che questo stamperà solo il primo elemento di 'età' perché ogni volta fate un nuovo iteratore. –

+0

Sì, vero, fisso – kukis

7

la mia biblioteca StreamEx ha po 'di zucchero sintattico per questo caso:

StreamEx.zip(names, ages, (name, age) -> name+":"+age).forEach(System.out::println) 

di base alleato dentro è lo stesso della risposta accettata. L'unica differenza è che IllegalArgumentException verrà generato se la dimensione degli elenchi differisce.

+0

Grazie per la risposta +1;) – MChaker