リストMap の リストに要素を追加(4)

oboe2uran.hatenablog.com

もっと短く書けるけど、メリットないか。。。

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.UnaryOperator;
/**
 * Map<K, List<V>> key存在自動チェック登録
 */
@FunctionalInterface
public interface MapListpush<K, V> extends Serializable{

   void accept(K k, V v);

   static <T> UnaryOperator<List<T>> listAddReturn(T t){
      return l->{
         l.add(t);
         return l;
      };
   }

   public static <K, V> MapListpush<K, V> of(Map<K, List<V>> m){
      return (k, v)->{
         m.put(k, Optional.ofNullable(m.get(k))
                  .map(e->listAddReturn(v).apply(e))
                  .orElseGet(()->new ArrayList<V>(Arrays.asList(v)))
         );
      };
   }
}