2016-03-02 133 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