我需要检查一些对象是否为空,我想知道是否有更容易解决我的问题。
基本上我需要在hashMap中放入一些值,但有些值引用可能为null。
解决这个问题我有以下
if (object1.data != null) {
map.put("key1",object1.data.value);
} else {
map.put("key1","NA");
}
if (object2.data != null) {
map.put("key2",object2.data.value);
} else {
map.put("key2","NA");
}
if (object1.otherData!= null) {
map.put("key3",object1.otherData.value);
} else {
map.put("key3","NA");
}
if (otherObject.otherData != null) {
map.put("key4",otherObject.otherData.otherValue);
} else {
map.put("key4","NA");
}
我需要向地图添加更多值,所有值都是字符串,但是对象和数据是不同的。 正如您所看到的,这很简单,检查Data是否为null我将获得其值,但我需要为1000+值执行此操作。
我想的是:
public String getValue(Object myObject) {
if (myObject == null) {
return "NA";
} else {
return myObject;
}
}
and call it like:
map.put("key1",getValue(object1.data.value)); // this of course wont work, when data is null
任何人都知道如何改善这一点? 我试过三年级,但它不是真的可读。如果可能,我正在寻找另一种解决方案。
感谢
答案 0 :(得分:1)
三元运算符看起来很整洁:
public String getValue(Data data){
return Objects.nonNull(data)?data.value?"NA";
}
并使用如下:
map.put(key, getValue(object.data));
答案 1 :(得分:1)
您可以编写地图包装器并在那里封装您的逻辑,例如:
public class ExampleWrapper {
private final Map<String, String> map;
public ExampleWrapper() {
this.map = new HashMap<>();
}
public void putIfDataNotNull(String key, String data) {
if (data != null) {
map.put(key, data);
}
}
public String get(String key) {
return map.getOrDefault(key, "NA");
}
}
或者您可以在检查"NA"
null
值
您也可以编写这样的重载方法:
public void putIfDataNotNull(String key, Data1 data) {
if (data.getValue() != null) {
map.put(key, data.getValue());
}
}
public void putIfDataNotNull(String key, Data2 data) {
if (data.getAnotherValue() != null) {
map.put(key, data.getAnotherValue());
}
}
但很多事情取决于你的下一个逻辑。您如何使用此地图,以及您需要具体使用的内容。这个地图有什么作用?
答案 2 :(得分:0)
也许发送data
代替,因为您担心的可能是空的。
public String getValue(Data data) {
if (data == null) {
return "NA";
} else {
return data.value;
}
}
并称之为:
map.put("key1", getValue(object1.data));
答案 3 :(得分:0)
也许你想这样做:
map.put("key1", object1.data != null ? object1.data.value : "NA";
答案 4 :(得分:0)
我看到您直接访问对象的成员,但如果可以添加getter,那么您可以执行以下操作:
public static String getOrDefault(Supplier<Data> supplier) {
Data data = supplier.get();
return data == null ? "NA" : data.value;
}
然后安全地填充地图:
map.put("key1", getOrDefault(object1::getData));
map.put("key2", getOrDefault(object2::getOtherData));