Java 8 java 8嵌套的空对象检查列表

Java 8 java 8嵌套的空对象检查列表,java-8,optional,Java 8,Optional,我尝试执行嵌套的空检查,然后如果映射不是空的,则清除嵌套对象中映射中的值 下面是我的假设代码。我想知道这是正确的方法还是有更优雅的解决方案 package exp.myJavaLab.Experiments; import java.util.*; public class OptionalTest { public Inner inner; public static void main(String[] args) {

我尝试执行嵌套的空检查,然后如果映射不是空的,则清除嵌套对象中映射中的值

下面是我的假设代码。我想知道这是正确的方法还是有更优雅的解决方案

package exp.myJavaLab.Experiments;

    import java.util.*;

    public class OptionalTest {

        public Inner inner;

        public static void main(String[] args) {

            OptionalTest testObj = new OptionalTest();
            Pojo pojo1 = new Pojo();
            pojo1.id = 1;
            Map<String, String> dataMap = new HashMap<>();
            dataMap.put("a","b");
            pojo1.dataMap = dataMap;
            Pojo pojo2 = new Pojo();
            pojo2.id = 2;

            Inner inner = new Inner();
            inner.pojoList = Arrays.asList(pojo1, pojo2);

            testObj.inner = inner;

            System.out.println(testObj);

            Optional.ofNullable(testObj.inner)
            .map(Inner::getPojoList)
            .ifPresent(pojos -> pojos.forEach(pojo -> {
                    if (pojo.getDataMap() != null) {
                        pojo.getDataMap().clear();
                    }
                }));

            System.out.println(testObj);

        }

        @Override
        public String toString() {
            final StringBuilder sb = new StringBuilder("OptionalTest{");
            sb.append("inner=").append(inner);
            sb.append('}');
            return sb.toString();
        }
    }

    class Inner {
        public List<Pojo> pojoList;

        public List<Pojo> getPojoList() {
            return pojoList;
        }

        @Override
        public String toString() {
            final StringBuilder sb = new StringBuilder("Inner{");
            sb.append("pojoList=").append(pojoList);
            sb.append('}');
            return sb.toString();
        }
    }

    class Pojo {

        public Map<String, String> dataMap;
        public int id;

        @Override
        public String toString() {
            final StringBuilder sb = new StringBuilder("Pojo{");
            sb.append("dataMap=").append(dataMap);
            sb.append(", id=").append(id);
            sb.append('}');
            return sb.toString();
        }

        public Map<String, String> getDataMap() {
            return dataMap;
        }

        public int getId() {
            return id;
        }
    }
package exp.myJavaLab.Experiments;
导入java.util.*;
公共类选项测试{
公共内部;
公共静态void main(字符串[]args){
OptionalTest testObj=新的OptionalTest();
Pojo pojo1=新Pojo();
pojo1.id=1;
Map dataMap=newhashmap();
dataMap.put(“a”、“b”);
pojo1.dataMap=dataMap;
Pojo pojo2=新Pojo();
pojo2.id=2;
内部=新内部();
inner.pojoList=Arrays.asList(pojo1,pojo2);
testObj.inner=内部;
System.out.println(testObj);
可选。不可用(testObj.inner)
.map(内部::getPojoList)
.ifPresent(pojo->pojo.forEach(pojo->{
if(pojo.getDataMap()!=null){
getDataMap().clear();
}
}));
System.out.println(testObj);
}
@凌驾
公共字符串toString(){
最终StringBuilder sb=新StringBuilder(“OptionalTest{”);
sb.append(“内部=”).append(内部);
某人附加('}');
使某人返回字符串();
}
}
班级内部{
公开名单;
公共列表getPojoList(){
返回pojoList;
}
@凌驾
公共字符串toString(){
最终StringBuilder sb=新StringBuilder(“内部{”);
sb.append(“pojoList=”).append(pojoList);
某人附加('}');
使某人返回字符串();
}
}
Pojo类{
公共地图数据地图;
公共int id;
@凌驾
公共字符串toString(){
最终StringBuilder sb=新StringBuilder(“Pojo{”);
sb.append(“dataMap=”).append(dataMap);
sb.append(“,id=”).append(id);
某人附加('}');
使某人返回字符串();
}
公共映射getDataMap(){
返回数据图;
}
公共int getId(){
返回id;
}
}

在我看来,集合永远不应该为空

您可以将您的
pojoList
dataMap
声明为
private
并实例化它们。 然后,您的类需要一些
add
-方法。因此,您确信
getDataMap()
永远不会返回
null

class Pojo {
    private Map<String, String> dataMap = new HashMap<>();

    public Map<String, String> getDataMap() {
        return dataMap;
    }

    public void add(String key, String value) {
        dataMap.put(key, value);
    }
}
Optional.ofNullable(testObj.inner)
.map(Inner::getPojoList)
.ifPresent(pojos -> pojos.forEach(pojo -> { pojo.getDataMap().clear(); }));

在我看来,集合永远不应该为空

您可以将您的
pojoList
dataMap
声明为
private
并实例化它们。 然后,您的类需要一些
add
-方法。因此,您确信
getDataMap()
永远不会返回
null

class Pojo {
    private Map<String, String> dataMap = new HashMap<>();

    public Map<String, String> getDataMap() {
        return dataMap;
    }

    public void add(String key, String value) {
        dataMap.put(key, value);
    }
}
Optional.ofNullable(testObj.inner)
.map(Inner::getPojoList)
.ifPresent(pojos -> pojos.forEach(pojo -> { pojo.getDataMap().clear(); }));

Pojo.stream().map(Pojo::getDataMap).filter(Objects::nonNull).forEach(map::clear)
Pojo.stream().map(Pojo::getDataMap).filter(Objects::nonNull).forEach(map::clear)
如果直接将“集合永远不应为null”规则应用于
getPojoList()
,您可以进一步简化代码:
Optional.ofNullable(testObj.inner).ifPresent(inner->inner.getPojoList().forEach(pojo->pojo.getDataMap().clear())@Obeland谢谢你的回答,但上面的代码只是一个假设。所以我的实际代码确实有getter和setter。我的代码被生成,因此无法控制getter和setter如果您直接将“集合永远不应该为null”规则应用于
getPojoList()
,您可以进一步简化代码:
Optional.ofNullable(testObj.inner).ifPresent(inner->inner.getPojoList().forEach(pojo->pojo.getDataMap()).clear())@Obeland谢谢你的回答,但上面的代码只是一个假设。所以我的实际代码确实有getter和setter。我的代码被生成,因此无法控制getter和setter