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