MapでStream

MapでStream

Map で Stream を使う練習。

public class Studay {
    public static void main(String[] args) {
        List<String> checkList = Arrays.asList("ohasi","osusi","oisi");
        Map<String, String> map = new HashMap<String, String>() {
            {
                put("osasimi", "1");
                put("ohasi", "2");
                put("osusi", "3");
                put("omikosi", "3");
            }
        };

        Map<String, String> getMap = map.entrySet().stream()
                .filter(v->checkList.contains(v.getKey()))
                .collect(Collectors.toMap(v->v.getKey(),v->v.getValue()));

        System.out.println(getMap);//{ohasi=2, osusi=3}
    }
}

そこまで難しい処理はしていません。
Map と検索用の List を作って、List に含まれる Key だけを抽出した Map を作っています。

entrySet()

ポイントはここ。Map から直接 Stream は使えないので、entrySet()で Map の全要素を Set で取得します。
中身はこんな感じで入っています。

Map<String, String> map = new HashMap<String, String>() {
    {
        put("osasimi", "1");
        put("ohasi", "2");
        put("osusi", "3");
        put("omikosi", "3");
    }
};
System.out.println(map.entrySet());//[osasimi=1, ohasi=2, osusi=3, omikosi=3]

これで Stream が使えるようになりました。
getKey()と getValue()で値を取得できるので、getKey()を使って checkList から filter しています。
最後は Collectors.toMap()で Map に変換して終わり。