我試圖將我的「長」代碼轉換爲更簡單的lambda驅動代碼。想法是從枚舉中獲取值。如果第一個值更高或更低,返回它並打破進一步的lambda。我不知道該從哪裏出發。 Lambda從枚舉返回代碼罰款,它計算差異罰款。我的問題是,一旦找到差異,就會讓值返回和/或打破進一步執行lambda。將代碼轉換爲lambda
碼不起作用:
BiFunction<Map<String, Integer>,Map<String, Integer>,Integer> biFunction = (m1, m2) -> {
enumWords.forEach(word -> {
Integer returnValue = 0;
if(m1.get(word) > m2.get(word)){
returnValue = m1.get(word).compareTo(m2.get(word));
break;
}
});
return returnValue;
};
這是代碼(預拉姆達),其工作:我還沒有嘗試
BiFunction<Map<String, Integer>,Map<String, Integer>,Integer> biFunction = (m1, m2) -> {
Integer returnValue = 0;
if(m1.get("Love") > m2.get("Love")){
returnValue = -1;
}else if(m1.get("Love") < m2.get("Love")){
returnValue = 1;
}else{
if(m1.get("You") > m2.get("You")){
returnValue = -1;
}else if(m1.get("You") < m2.get("You")){
returnValue = 1;
}else{
if(m1.get("Me") > m2.get("Me")){
returnValue = -1;
}else if(m1.get("Me") < m2.get("Me")){
returnValue = 1;
}else{
if(m1.get("Forever") > m2.get("Forever")){
returnValue = -1;
}else if(m1.get("Forever") < m2.get("Forever")){
returnValue = 1;
}else{
if(m1.get("Give") > m2.get("Give")){
returnValue = -1;
}else if(m1.get("Give") < m2.get("Give")){
returnValue = 1;
}else{
System.out.println("Same lyrics!");
}
}
}
}
}
取代'forEach',我會去使用'在流filter'的方法,然後後,你可以做'findFirst'哪一個返回'Optional >'哪裏?是Stream類型。 (可選) opt = enumWords.stream()。filter(word - > m1.get(word)> m2.get(word)).map(m1.get(word).compareTo(m2.get(word) )).findFirst();' –
Orin
你的嘗試是矛盾的。你能發佈你的工作非lambda代碼來顯示你真正想要做什麼嗎?不幸的是,你的解釋也沒有幫助。唯一不解釋您的*嘗試解決方案*是「想法是從枚舉中獲取值」,但是沒有涉及到枚舉。那麼你的實際目標是什麼?在Enum中有 – Holger
有關鍵詞,我要通過歌曲歌詞,如果第一個關鍵詞比另一首歌曲出現更多,它會在列表中「向上」。如果他們具有相同的第一個關鍵字的數量,那麼它會轉到第二個等等。問題在於它之前是硬編碼的,我想這樣做,所以即使有人改變枚舉詞也可以使用它。 – Brns