ハッシュマップのハッシュマップを初期化するコードを繰り返さないようにする方法?

エルナン・出演:

すべてのクライアントは、日付と、ID、および多くの請求書を持って、

日付別の請求書のhasmapの、idでのクライアントのハッシュマップとして保存

HashMap<LocalDateTime, Invoice> allInvoices = allInvoicesAllClients.get(id);

if(allInvoices!=null){           
    allInvoices.put(date, invoice);      //<---REPEATED CODE                  
}else{
    allInvoices = new HashMap<>();
    allInvoices.put(date, invoice);      //<---REPEATED CODE
    allInvoicesAllClients.put(id, allInvoices);                                            
}

Javaソリューションを使用することのようです getOrDefault

HashMap<LocalDateTime, Invoice> allInvoices = allInvoicesAllClients.getOrDefault(
    id,                            
    new HashMap<LocalDateTime, Invoice> (){{  put(date, invoice); }}
);

GETがnullでない場合でも、まだもまだ必要とされている「allInvoicesAllClients」にデータを追加して、実行する(日付、請求書)を入れたいです。それは思われないように非常に役立ちます。

ジェイコブG.:

これはのための優秀なユースケースですMap#computeIfAbsentあなたのスニペットは、本質的に同等です:

allInvoicesAllClients.computeIfAbsent(id, key -> new HashMap<>()).put(date, invoice);

場合idでキーとして存在していないallInvoicesAllClients、それはからのマッピングを作成しますid新しいのHashMapと新しいを返しますHashMap場合idキーとして存在している、それは既存戻りますHashMap

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=339098&siteId=1