如何在Java8中将以下代码转换为lambda ??
List<List<String>> my2dList = new ArrayList<List<String>>();
int counter = 0;
for (int i = 0; i < 5; i++) {
my2dList.add(new ArrayList<String>());
for (int j = 0; j < 10; j++) {
System.out.println("Counter: " +counter);
my2dList.get(i).add(new String(""+counter));
counter++;
}
}
预期结果:
[[0、1、2、3、4、5、6、7、8、9],[10、11、12、13、14、15、16、17、18、19],[20 ,21、22、23、24、25、26、27、28、29],[30、31、32、33、34、35、36、37、38、39],[40、41、42、43 ,44,45,46,47,48,49]]
答案 0 :(得分:5)
您可以使用IntStream.range(int startInclusive, int endExclusive)
生成整数流。
然后可以使用mapToObj(IntFunction<? extends U> mapper)
处理这些整数。
最后,您可以使用collect(Collector<? super T,A,R> collector)
来收集值,例如使用Collectors.toList()
到List
。
List<List<String>> my2dList =
IntStream.range(0, 5)
.mapToObj(i -> IntStream.range(0, 10)
.mapToObj(j -> Integer.toString(i * 10 + j))
.collect(Collectors.toList()))
.collect(Collectors.toList());
更新
如果要在流式传输时打印值,请使用peek(Consumer<? super T> action)
。
如果peek()
方法应将值视为int
,则可以在mapToObj
中拆分表达式,以便可以先观察中间值,然后再将其转换为{ {1}}。
然后可以使用方法引用而不是lambda来转换为String
。
String