Java流更改列表中地图的键

TX *_*X T 3 java java-stream

是否可以使用java流来更改列表中地图的键,即给出地图的原始列表是:

List<Map<String, String>> list = new ArrayList<Map<String, String>>() {{
            add(new HashMap<String, String>() {{
                put("id", "1");
                put("display", "foo");
            }});
            add(new HashMap<String, String>() {{
                put("id", "2");
                put("display", "bar");
            }});
        }};

        System.out.println(list.toString());
Run Code Online (Sandbox Code Playgroud)

从上面的列表(输出演示)

[{display=foo, id=1}, {display=bar, id=2}]
Run Code Online (Sandbox Code Playgroud)

到地图列表:

[{sample=foo, sample_id=1}, {sample=bar, sample_id=2}]
Run Code Online (Sandbox Code Playgroud)

基本上,将键“id”更改为“sample_id”,并将“display”更改为“sample”。

Ind*_*sak 7

这会起作用,

    List<Map<String, String>> list2 = list.stream().map(e -> {
        Map<String, String> map = new HashMap<>();
        for (Map.Entry x : e.entrySet()) {
            if (x.getKey().equals("id")) {
                map.put("sample_id", (String) x.getValue());
            } else if (x.getKey().equals("display")) {
                map.put("sample", (String) x.getValue());
            } else {
                map.put((String) x.getKey(), (String) x.getValue());
            }
        }

        return map;
    }).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

稍微优雅一些​​,

    List<Map<String, String>> list3 = list.stream().map(
            e -> e.entrySet().stream().collect(Collectors.toMap(
                    x -> {
                        if (x.getKey().equals("id")) {
                            return "sample_id";
                        } else if (x.getKey().equals("display")) {
                            return "sample";
                        } else {
                            return x.getKey();
                        }
                    },
                    Map.Entry::getValue))).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)