无法在流forEach

时间:2017-07-03 09:23:30

标签: java java-8 java-stream

我正在学习平面地图,想要打印integers的无限序列。

然而,当我尝试编译程序时,它在System.out.println

失败了
public class Test{
    public static void main(String[] args) {
    Stream.of("").flatMap(x -> Stream.iterate(1, i -> i + 1)).forEach(System.out.println); 
    }
}

有人可以帮助我,让我知道如何做到这一点,如果可能的话,请检查我的代码,以便为问题打印无限序列integers

3 个答案:

答案 0 :(得分:6)

简单:

System.out.println

方法参考。你需要

System.out::println

代替。请参阅here进行阅读。重点是:flatMap()期待你能做到的事情"呼叫"。并且System.out.println并不表示可以调用的内容。因此,语法无效!

答案 1 :(得分:3)

您必须将Consumer传递给forEach

您可以使用lambda表达式:

Stream.of("").flatMap(x -> Stream.iterate(1, i -> i + 1)).forEach(i -> System.out.println (i)); 

或方法参考:

Stream.of("").flatMap(x -> Stream.iterate(1, i -> i + 1)).forEach(System.out::println);

PS,我不知道你为什么要创建初始单个元素Stream,然后在其上使用flatMap而不是简单地创建无限Stream并运行forEach在它上面:

Stream.iterate(1, i -> i + 1).forEach(System.out::println);

答案 2 :(得分:3)

你应该注意无限的流和flatmap,因为它们是急切的计算,而不是非常容易理解:

 Stream.of("")
       .flatMap(x -> Stream.iterate(1, i -> i + 1))
       .limit(1) // added this one
       .forEach(System.out::println);

这将打印1并且永远不会完成 - limit在这里无效。