2017-11-29 4 views
-1

オブジェクトがnullであるかどうかを確認する必要があり、私の問題が簡単に解決するかどうかは疑問です。パラメータとして渡した後にヌルオブジェクトを確認する

基本的には、いくつかの値を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 

誰もがどのように私はこれを改善することができます

私のようなものを考えていましたか? 私は3次元を試しましたが、それは本当に読みにくいです。可能であれば、別の解決策を探しています。それはあなたがヌルであるかもしれない心配何だから

おかげ

答えて

0

はおそらく、代わりにdataを送ります。

public String getValue(Data data) { 
    if (data == null) { 
     return "NA"; 
    } else { 
     return data.value; 
    } 
} 

など、それを呼び出す:

map.put("key1", getValue(object1.data)); 
+0

これは良好です"value"は常に属性名ですが、異なる属性名は何か、属性名をパラメータとして与えることは可能でしょうか? –

+0

それは可能かもしれない、確かに。あなたの関数が 'value'を取得していることを意味する' getValue'という名前が付いていても、さまざまなものがある場合は名前を変更したいかもしれません。 –

0

はたぶん、あなたはこれをしたい:

map.put("key1", object1.data != null ? object1.data.value : "NA"; 
1

三項演算子は、私にはきちんと見えます:

public String getValue(Data data){ 
    return Objects.nonNull(data)?data.value?"NA"; 
} 

そして、それを使用します以下のようになります。

map.put(key, getValue(object.data)); 
+0

これはうまくいきました。残念ながら_ data.otherData data.diferentVariableName パラメータとして変数名を渡すことは可能でしょうか? –

+0

@Marcopolo RamosはあなたのotherDataで、differentVariableNameは同じ型ですか?はいの場合、それは動作することを心配する必要はありません。いいえの場合は、その変数のTypeをパラメータとして渡して型変換し、次にvalueを呼び出します。 –

1

あなたは、マップのラッパーを書いて、そこにあなたのロジックをincapsulate、例えば可能性:

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"); 
    } 
} 

それとも、あなたがこのようなオーバーロードされたメソッドを書くことができます。またnull

のチェック後に"NA"値をすぐに置くことができます:

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()); 
    } 
} 

しかし、多くのものは、 ur次の論理。どのようにこのマップを使用し、具体的に何が必要です。どのような役割がありますマップはありますか?

私はあなたが直接、オブジェクトのメンバーにアクセス参照、それはゲッターを追加することが可能だならば、あなたが何かを行うことができます
0

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)); 
関連する問題