我正在学习平面地图,想要打印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
。
答案 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
在这里无效。