Java stream API.在一行中查找对象匹配谓词的字段.如果不存在,则返回一些默认值



例如,我们有一个包含一些字段的简单类。假设我们有一个名为"name"和"id"的字段。我想获取具有指定 id 的对象的名称并返回一些 defaultName,如果没有这样的对象:

private List<MyObject> myObjects;
public String findFieldById(int id) {
    MyObject matchingObj = myObjects.stream()
                    .filter(m -> m.getId() == id)
                    .findFirst().orElse(null);
    return (matchingObj == null) ? "defaultName" : matchingObj.getName();
}

我的问题是我如何才能轻松地在一行中对流中的 null 进行此检查?

您可以在

一个管道中执行此类操作,方法是映射到MyObject::getName之后findFirst否则通过orElse提供默认值。

return myObjects.stream()
         .filter(m -> m.getId() == id)
         .findFirst()
         .map(MyObject::getName)
         .orElse("defaultName");

你不会被迫使用流,一个简单的带有if语句的java for循环也可以做到这一点:

public String findFieldById(int id) {
    // iterate over all objects
    for(MyObject myObject : myObjects){
        // if an object's id matches the given parameter
        if(myObject.getId() == id){
            // we will return its name
            return myObject.getName();
        }
    }
    // if nothing was found we will return the default
    return "defaultName";
}

相关内容

最新更新