Java Lambda消费者if语句

Java Lambda消费者if语句,java,lambda,Java,Lambda,我在Java中无法正确编写Lambda Consumer if语句。使用者应该工作,以便在对象Teos为null或方法getNimi返回“”时,使用setNimi将名称更改为“nimi ei tiedosa”。这是家庭作业,所以我应该把Lambda作为一个参数来写,而不是在方法本身中 kokoelma.muuta(teos -> { if (teos.getNimi().equals("") || teos.getNimi() != null) {

我在Java中无法正确编写Lambda Consumer if语句。使用者应该工作,以便在对象Teos为null或方法getNimi返回“”时,使用setNimi将名称更改为“nimi ei tiedosa”。这是家庭作业,所以我应该把Lambda作为一个参数来写,而不是在方法本身中

kokoelma.muuta(teos -> {
       if (teos.getNimi().equals("") || teos.getNimi() != null) {    
          teos.setNimi("nimi ei tiedossa")
       }
   };
);
if语句应该如何编写

NetBeans错误消息说;预期的,)预期的和非法的表达式开始,但我找不到正确的位置;及)


提前感谢。

如果您有一个更复杂的
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"));

如果您有一个更复杂的
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"));
试着扩展它

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");});
试着扩展它

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");});

更多的是了解消费者如何在java8中工作。
它是任何接受类型并执行某些操作而不返回任何内容的函数。
对不起,我不知道muuta是什么,但它看起来像是对iterable 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);
List kokoelma=new ArrayList();
消费者检查集=
teos->{
if(teos.getNimi().equals(“”| | teos.getNimi()!=null)
teos.setNimi(“nimi-ei Tiedosa”);
};
kokoelma.forEach(checkAndSet);

更多的是了解消费者如何在java8中工作。
它是任何接受类型并执行某些操作而不返回任何内容的函数。
对不起,我不知道muuta是什么,但它看起来像是对iterable 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);
List kokoelma=new ArrayList();
消费者检查集=
teos->{
if(teos.getNimi().equals(“”| | teos.getNimi()!=null)
teos.setNimi(“nimi-ei Tiedosa”);
};
kokoelma.forEach(checkAndSet);

回答得很好!对于这一个,我宁愿使用非缩短的lamba。非常感谢您的快速回复,我尝试将其分解,但没有发现错误。现在它按预期工作。回答得很好!对于这一个,我宁愿使用非缩短的lamba。非常感谢您的快速回复,我尝试将其分解,但没有发现错误。现在它按预期工作了。谢谢你们两个。谢谢你们两个。你说“我应该把Lambda作为一个参数来写,而不是写在方法本身”是什么意思?您的意思是需要单独创建lambda,作为
Consumer
的一个实例,然后编写类似
kokokoelma.muuta(myLambda)的代码?您所说的“我应该将Lambda作为参数而不是方法本身编写”是什么意思?您的意思是需要单独创建lambda,作为
Consumer
的一个实例,然后编写类似
kokokoelma.muuta(myLambda)的代码