有条件地将项目添加到 HashMap 的有效方法
Efficient way to conditionally add items to HashMap
有没有一种有效且冗余最少的方法来有条件地将新项目放入地图中。
GenericObject genericObject;
...
FieldObject obj = genericObject.getFieldObject();
if(obj == null) {
map.put("key1", null);
map.put("key2", null);
} else {
map.put("key1", obj.getField1());
map.put("key2", obj.getField2());
}
我能做的最好的是以下,但很好奇 Java 9.
中是否有更好的方法来完成上述操作
boolean insert = obj != null;
map.put("key1", insert? obj.getField1() : null);
map.put("key2", insert? obj.getField2() : null);
您可以使用 Optional
s:
Optional<FieldObject> obj = Optional.ofNullable(genericObject.getFieldObject());
map.put("key1", obj.map(FieldObject::getField1).orElse(null));
map.put("key2", obj.map(FieldObject::getField2).orElse(null));
您可以将 null 检查委托给 GenericObject
,方法是向其添加以下 2 个方法:
public String getField1() {
return fieldObject == null ? null : fieldObject.getField1();
}
public String getField2() {
return fieldObject == null ? null : fieldObject.getField2();
}
然后
map.put("key1", genericObject.getField1());
map.put("key2", genericObject.getField2());
将 null 作为值添加到地图中,这很奇怪。
map.put("key", null);
map.get("key"); // -- is it null because no such key or because the value is null?
所以,是不是不需要添加空值你可以使用可选的
Optional.ofNullable(obj).ifPresent(v -> {
map.put("key1", obj.getField1());
map.put("key2", obj.getField2());
});
但是您的简单 if
语句更具可读性
有没有一种有效且冗余最少的方法来有条件地将新项目放入地图中。
GenericObject genericObject;
...
FieldObject obj = genericObject.getFieldObject();
if(obj == null) {
map.put("key1", null);
map.put("key2", null);
} else {
map.put("key1", obj.getField1());
map.put("key2", obj.getField2());
}
我能做的最好的是以下,但很好奇 Java 9.
中是否有更好的方法来完成上述操作boolean insert = obj != null;
map.put("key1", insert? obj.getField1() : null);
map.put("key2", insert? obj.getField2() : null);
您可以使用 Optional
s:
Optional<FieldObject> obj = Optional.ofNullable(genericObject.getFieldObject());
map.put("key1", obj.map(FieldObject::getField1).orElse(null));
map.put("key2", obj.map(FieldObject::getField2).orElse(null));
您可以将 null 检查委托给 GenericObject
,方法是向其添加以下 2 个方法:
public String getField1() {
return fieldObject == null ? null : fieldObject.getField1();
}
public String getField2() {
return fieldObject == null ? null : fieldObject.getField2();
}
然后
map.put("key1", genericObject.getField1());
map.put("key2", genericObject.getField2());
将 null 作为值添加到地图中,这很奇怪。
map.put("key", null);
map.get("key"); // -- is it null because no such key or because the value is null?
所以,是不是不需要添加空值你可以使用可选的
Optional.ofNullable(obj).ifPresent(v -> {
map.put("key1", obj.getField1());
map.put("key2", obj.getField2());
});
但是您的简单 if
语句更具可读性