编译多行lambda的问题

时间:2016-07-10 02:07:01

标签: lambda java-8

我在看http://www.ibm.com/developerworks/library/j-java-streams-1-brian-goetz/index.html

清单6似乎没有为我编译。我尝试使用ArrayList<Integer>和对象的ArrayList。

int count = 
    anArrayList.stream()
               .map(e -> { System.out.println("Saw " + e); e })
               .count();

我得到的错误是:

The method map(java.util.function.Function<? super java.lang.Integer,? extends R extends java.lang.Object>) in the type Stream<Integer> is not applicable for the arguments (java.util.function.Function<? super java.lang.Integer,? extends R extends java.lang.Object>)

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

更改

.map(e -> { System.out.println("Saw " + e); e })

.map(e -> { System.out.println("Saw " + e); return e; })

它应该有用。

大括号的内容是一个函数,在语法上必须&#34;返回&#34;它的回报价值。分号不是可选的。

这似乎是网站上的拼写错误。 另请注意,在&#34;真实&#34;代码,您不希望在流处理过程中包含类似System.out.println的副作用。