kiyo_hikoのブログ

メモ+日記?

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のコンストラクターでダイヤモンド演算子が使えてないのがイヤ。
あと型変数は静的メソッドには使えないらしい。


もし改善できたら追記します。