Map<String, List<String>> map;
結構、頻繁にこういう Key と、List のマップを用意して、Key の存在を確認して
List を新しく生成して、put したり、マップから取得して add して
再びマップに put するのを記述するのは、いつもなんとかならないかと思ってました。
そこで、以下の List に add して List を返す UnaryOperator を用意します。
public static <T> UnaryOperator<List<T>> listAddReturn(T t){ return l->{ l.add(t); return l; }; }
Map<String, List<String>> map = new HashMap<>(); map.put("a", Optional.ofNullable(map.get("a")) .map(list->listAddReturn("A").apply(list)) .orElse(listAddReturn("A").apply(new ArrayList<String>())) ); map.put("a", Optional.ofNullable(map.get("a")) .map(list->listAddReturn("B").apply(list)) .orElse(listAddReturn("B").apply(new ArrayList<String>())) ); System.out.println(map);
結果
{a=[A, B]}