文字列のリストにマップのJava8変換一覧

VelNaga:

私は物事の下に達成するためにJava8を使用しています、

 Map<String, String> m0 = new HashMap<>();
        m0.put("x", "123");
        m0.put("y", "456");
        m0.put("z", "789");

        Map<String, String> m1 = new HashMap<>();
        m1.put("x", "000");
        m1.put("y", "111");
        m1.put("z", "222");

        List<Map<String, String>> l = new ArrayList<>(Arrays.asList(m0, m1));

        List<String> desiredKeys = Lists.newArrayList("x");

        List<Map<String, String>> transformed = l.stream().map(map -> map.entrySet().stream()
                .filter(e -> desiredKeys.stream().anyMatch(k -> k.equals(e.getKey())))
                .collect(Collectors.toMap(e -> e.getKey(), p -> p.getValue())))
                .filter(m -> !m.isEmpty())
                .collect(Collectors.toList());
        System.err.println(l);
        System.err.println(transformed);
        List<String> values = new ArrayList<>();
        for (Map<String,String> map : transformed) {
            values.add(map.values().toString());
            System.out.println("Values inside map::"+map.values());
        }
        System.out.println("values::"+values); //values::[[123], [000]]

ここで、私はリストからのみのxの値を取得したいと思います。私はそれを達成しているが、それは正しい形式ではありません。

予想される出力:値:: [123、000]

実際の出力:値:: [123]、[000]

私は、実際の出力を修正する方法を知っています。しかし、この問題を達成するための簡単な方法はありますか?すべてのヘルプはかなりのだろう。

ミーシャ:

あなたは、そのキーでエントリを見つけるために、マップ全体を反復処理する必要はありません。それは何Map.getのためにあります。値のリストのリストを平らにするために、使用しますflatMap

import static java.util.stream.Collectors.toList;
.....

List<String> values = l.stream()
    .flatMap(x -> desiredKeys.stream()
            .filter(x::containsKey)
            .map(x::get)
    ).collect(toList());

使用サイドノート回避にl変数名として(小文字のL)を。それはあまりにも多くの数のように見えます1

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=222073&siteId=1