JavaでMapの初期化
あたりがあるが、
(mapcar #'cons xs ys)
(またはHaskellのzip?)みたいなノリでリストからマップをつくれないものか考えてみた。
試作品
public class Main { public static void main(String[] args) { new Main(); } public Main() { List<String> students = Arrays.asList( new String[]{"のび", "ごうだ", "できすぎ"}); List<Integer> scores = Arrays.asList( new Integer[]{0, 30, 100}); Map<String, Integer> map = new MapBuilder<String, Integer>() .from(students, scores); System.out.println(map); } } class MapBuilder<K, V> { public Map<K, V> from(List<K> ks, List<V> vs) { int ksize, vsize; int size = (ksize = ks.size()) < (vsize = vs.size()) ? ksize : vsize; Map<K, V> map = new HashMap(size); for (int i = 0; i < size; i++) map.put(ks.get(i), vs.get(i)); return map; } }
うーん、微妙。
個人的にMapBuilderのコンストラクターでダイヤモンド演算子が使えてないのがイヤ。
あと型変数は静的メソッドには使えないらしい。
もし改善できたら追記します。