2015-05-09 16 views
12

Mam dwie listy, jak postępowaćJak wydrukować dwie listy razem przy użyciu Stream API java 8?

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

co chcę zrobić, to wydrukować te dwie listy jak tak

James:25 
John:35 
Fred:15 

Łatwo jest to zrobić za pomocą klasycznego sposobu

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

Czy można to zrobić za pomocą Stream API java 8?

Co jestem w stanie zrobić, to wydrukować tylko jedna pojedyncza lista

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

Odpowiedz

14

Najprostszym sposobem jest stworzenie IntStream generować indeksy, a następnie map Każdy indeks do String chcesz utworzyć .

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

również może być zainteresowany w tym SO pytanie Zipping streams using JDK8 with lambda (java.util.stream.Streams.zip), ponieważ jest to rodzaj funkcjonalności prosisz.

1

Podczas Alexis C. odpowiedź jest poprawna, można by argumentować, że jest to najprostszy sposób, aby osiągnąć żądany zachowanie w Javie 8. proponuję:

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

Albo nawet bez index:

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

Dziękuję za pomoc, doceniam to +1;) – MChaker

+3

Myślę, że wydrukuje tylko pierwszy element "wieku", ponieważ za każdym razem tworzysz nowy iterator. –

+0

Tak, prawda, naprawiono – kukis

7

Moja StreamEx biblioteka ma trochę cukru składniowej w tym przypadku:

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

Podstawowe sojusznik w środku jest taki sam, jak w przyjętej odpowiedzi. Jedyna różnica polega na tym, że IllegalArgumentException zostanie wygenerowany, jeśli rozmiar list będzie inny.

+0

Dzięki za odpowiedź +1;) – MChaker

Powiązane problemy