MCh*_*ker 12 java java-8 java-stream
我有两个列表如下
List<String> names = Arrays.asList("James","John","Fred");
List<Integer> ages = Arrays.asList(25,35,15);
Run Code Online (Sandbox Code Playgroud)
我想要做的就是打印这两个列表
James:25
John:35
Fred:15
Run Code Online (Sandbox Code Playgroud)
使用经典方式很容易做到
for(int i=0;i<names.size();i++){
System.out.println(names.get(i)+":"+ages.get(i));
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用Stream API java 8?
我能做的是只打印一个列表
names.stream().forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
Ale*_* C. 15
最简单的方法是创建一个IntStream生成索引,然后将每个索引映射到String您要创建的索引.
IntStream.range(0, Math.min(names.size(), ages.size()))
.mapToObj(i -> names.get(i)+":"+ages.get(i))
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
此外,您可能对使用带有lambda的JDK8(java.util.stream.Streams.zip)的Zipping流感兴趣,因为这是您要求的功能.
我的StreamEx库对于这种情况有一些语法糖:
StreamEx.zip(names, ages, (name, age) -> name+":"+age).forEach(System.out::println)
Run Code Online (Sandbox Code Playgroud)
基本上里面和接受的答案一样.唯一的区别是,IllegalArgumentException如果列表大小不同,将会抛出.
| 归档时间: |
|
| 查看次数: |
7121 次 |
| 最近记录: |