2016-03-14 46 views
0

我在編寫Lambda Consumer if語句時遇到了Java問題。消費者應該工作,以便如果對象Teos爲null或getNimi方法返回「」,它將setNimi的名稱更改爲「nimi ei tiedossa」。這是家庭作業,所以我應該將Lambda編寫爲參數,而不是方法本身。Lambda Consumer if語句

kokoelma.muuta(teos -> { 
     if (teos.getNimi().equals("") || teos.getNimi() != null) {  
      teos.setNimi("nimi ei tiedossa") 
     } 
    }; 
); 

if語句應該怎麼寫?

NetBeans錯誤消息說;預計,)預期和非法開始的表達,但我找不到正確的位置;和)。

在此先感謝。

+0

你是什麼意思「我應該寫Lambda作爲參數,而不是方法本身」?你的意思是說,你需要分別創建你的lambda,作爲'Consumer'的一個實例,然後寫一些類似'kokoelma.muuta(myLambda);'的東西。 –

回答

0

如果您有更復雜的lambda,應該將其分成多行。
如果你這樣做,這將是明確的,你沒看錯:

kokoelma.muuta(teos -> { 
    if (teos.getNimi().equals("") || teos.getNimi() != null) 
     teos.setNimi("nimi ei tiedossa") 
    }; 
); 

更短版拉姆達的,只能容納一個說法,沒有分號並配置{}

kokoelma.muuta(teos -> if (teos.getNimi().equals("") || teos.getNimi() != null) teos.setNimi("nimi ei tiedossa")); 
+0

偉大的思想思考相似.. – Claudiu

+0

感謝你們倆。 – kerubi

2

嘗試將其展開。

kokoelma.muuta(teos -> {if (teos.getNimi().equals("") || teos.getNimi() != null) teos.setNimi("nimi ei tiedossa")};); 

這將成爲:

kokoelma.muuta(teos -> { 
    if (teos.getNimi().equals("") || teos.getNimi() != null) 
     teos.setNimi("nimi ei tiedossa") 
}; 
); 

從這裏很明顯的分號應該是會後聲明,以及不應該有一個拉姆達後:

kokoelma.muuta(teos -> { 
    if (teos.getNimi().equals("") || teos.getNimi() != null) 
     teos.setNimi("nimi ei tiedossa"); 
} 
); 

或者,縮短再次:

kokoelma.muuta(teos -> { if (teos.getNimi().equals("") || teos.getNimi() != null) teos.setNimi("nimi ei tiedossa");}); 
+0

很好的回答!我寧願堅持這個非縮短的lamba。 – dinomario10

+0

非常感謝您的快速回復,我試圖將其分解,但沒有發現錯誤。現在它按預期工作。 – kerubi

0

它更多地瞭解消費者如何在java8中工作。
它的任何函數,它接受類型並做一些操作而不返回任何東西。
對不起,我不知道muuta是什麼,但它看起來像迭代kokoelma迭代。

爲此,您可以定義一個獨家Consumer並將其傳遞給muuta。

例如

public static class Something{ 
    String nimi; 

    public String getNimi() { 
     return nimi; 
    } 

    public void setNimi(String nimi) { 
     this.nimi = nimi; 
    } 
} 

然後,我們可以創建一個消費者,並把它作爲一個功能。

List<Something> kokoelma = new ArrayList<>(); 

    Consumer<Something> checkAndSet = 
      teos -> { 
       if (teos.getNimi().equals("") || teos.getNimi() != null) 
        teos.setNimi("nimi ei tiedossa"); 
      }; 

    kokoelma.forEach(checkAndSet);