Lambda Consumer if语句

时间:2016-03-14 16:29:03

标签: java lambda

我在编写Lambda Consumer if语句时遇到了Java问题。消费者应该工作,以便如果对象Teos为null或方法getNimi返回""它用setNimi将名称更改为" nimi ei tiedossa"。这是作业,所以我应该将Lambda作为参数编写,而不是在方法本身。

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

如何写出if语句?

NetBeans错误消息说;预期,)预期和非法的表达开始,但我无法找到正确的点;和)。

提前致谢。

3 个答案:

答案 0 :(得分: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")
};
);

从这里可以清楚地看到分号应该在声明之后,并且不应该是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");});

答案 1 :(得分:0)

如果你有一个更复杂的lambda,你应该把它分成多行 如果你这样做,你会明白错误的地方:

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

lambda的更短版本,只能容纳一个语句,没有分号并处理{}

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

答案 2 :(得分:0)

更多地了解消费者如何在java8中工作 它的任何函数都采用类型并执行一些操作而不返回任何内容。
对不起,我不知道muuta是什么,但它看起来像迭代可迭代的kokoelma。

为此,您可以定义一个独家消费者并将其传递给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);