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

2022-09-04 08:16:00

我有两个列表如下

List<String> names = Arrays.asList("James","John","Fred");
List<Integer> 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);

答案 1

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

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

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


答案 2

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

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

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


推荐