如何使用Java Lambda

时间:2018-09-23 20:17:32

标签: java lambda java-8

如何在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]]

1 个答案:

答案 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