【问题标题】:Is it possible to compress this expression to one line?是否可以将此表达式压缩为一行?
【发布时间】:2020-12-18 07:46:59
【问题描述】:

我有这个 java 函数,它根据对象的名称变量在数组列表中搜索对象

public Animal buscarAnimal(String animal){ 
        for(Animal a: animais){
            if(a.getNomeAnimal().equals(animal))return a;
        }
        return null;

我想知道是否可以在一行中使用 foreach 和 lambdas 或者流来完成所有的比较和对象的返回。 我尝试了一段时间,但我不是真正的专业人士,只能做到这一点

animais.forEach((Animal a)->{if(a.getNomeAnimal().equals(animal)){return a;}});

然而,这给了我以下错误:

error: incompatible types: bad return type in lambda expression

【问题讨论】:

    标签: java lambda one-liner


    【解决方案1】:

    使用Streamfilter 然后findFist。这将返回一个Optional<Animal>。如果您不想更改方法以返回 Optional<Animal>(推荐),请使用 orElse(null) 来获取您的原始行为。

    return
        animais.stream().filter(a -> a.getNomeAnimal().equals(animal))
        .findFirst()
        .orElse(null);
    

    一行:

    return animais.stream().filter(a -> a.getNomeAnimal().equals(animal)).findFirst().orElse(null);
    

    【讨论】:

    • 很好的答案,很好的解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多