如何使用Stream API java 8一起打印两个列表?

我有两个列表如下

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

我想要做的就是打印这两个列表

 James:25 John:35 Fred:15 

使用经典方式很容易做到

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

有没有办法使用Stream API java 8?

我能做的是只打印一个列表

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

最简单的方法是创建一个IntStream来生成索引,然后将每个索引映射到您要创建的String

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

此外,您可能对使用带有lambda的JDK8(java.util.stream.Streams.zip)压缩流的问题感兴趣,因为这是您要求的function。

我的StreamEx库对于这种情况有一些语法糖:

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

基本上里面和接受的答案一样。 唯一的区别是,如果列表大小不同,将抛出IllegalArgumentException

虽然Alexis C.回答是正确的,但人们会认为这是在Java 8中实现请求行为的最简单方法。我建议:

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

甚至没有索引:

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