2016-03-02 131 views
0

我有一个问题,找到答案应该很容易,但我找不到它。我是Java新手,主要使用C#。带花括号的流api

假设我们有下面的代码:

List<Double> mean = new ArrayList<>(Collections.nCopies(dim, .0)); 
//some stuff 
mean = mean.stream().map(num->num/=dim).collect(Collectors.toList()); 

It'a所有凉爽。现在让我们说我想做很多操作,不仅仅是lamba函数内部的一个分歧。然后,我想这一定是使用大括号,我见过一些例子,但是当我将其更改为:

List<Double> mean = new ArrayList<>(Collections.nCopies(dim, .0)); 
//some stuff 
mean = mean.stream().map(num-> {num/=dim; /* other stuff */}).collect(Collectors.toList()); 

它给了我一个错误,这个方法是不是能够为参数(([no_type]num)->{})。我试过使用显式演员,但它保持不变。我确信我可以在C#中做这样的事情。

谢谢!

+0

什么是实际错误? –

+1

类型流中的方法映射(函数<?super Double,?extends R>)不适用于参数(( num) - > {})。 –

+2

见路易斯的答案。如果你使用{}并返回一个值,你必须说'return expression;' –

回答

2

如果你想要做一个拉姆达内多次操作,你将不得不将其与return语句来得到最终的输出写成

num-> { 
    return num/=dim; 
} 

。如果你用大括号写这样的lambda表达式,就像实现一个函数一样:你需要一个return语句,但是你可以在lambda表达式中使用尽可能多的代码。

+0

哦,没错,那肯定是件容易的事。非常感谢! –

+1

请注意,使用'/ ='在这里完全没有必要和困惑。只需使用'num/dim'。 –

+0

请注意,如果在有效的上下文中有类似于'num-> num/dim'的lambda,则每个IDE都应该提供一个选项来转换为'num - > {return num/dim; '为你。例如。在Netbeans中,该选项标记为“*将块用作lambda的主体*”。 – Holger