我在编写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错误消息说;预期,)预期和非法的表达开始,但我无法找到正确的点;和)。
提前致谢。
答案 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);