gpt4 book ai didi

Java 8 流 - 合并 Maps 集合

转载 作者:行者123 更新时间:2023-12-02 12:24:47 25 4
gpt4 key购买 nike

假设我有一个具有以下签名的方法:

Map<String, String> merge (String[][] ... maps)

它需要一个(可变的)数量的二维数组来表示映射,例如:

        String[][] m1 = new String[][] {
{"k1", "a"},
{"k2", "b"}
};

String[][] m2 = new String[][] {
{"k1", "a"},
{"k2", "b"},
{"k3", "c"}
};

String[][] m3 = new String[][] {
{"k1", "x"},
{"k2", "b"}
};

现在我可以像这样从左到右合并任意两个 map :

 Map<String, String> m1 = Stream.of(map1).collect(Collectors.toMap(k -> k[0], v -> v[1]));
Map<String, String> m2 = Stream.of(map2).collect(Collectors.toMap(k -> k[0], v -> Optional.ofNullable(v[1]).orElse("null")));
m1.forEach((key, value) -> m2.merge(key, value, (v1, v2) -> v1));

但是我如何才能合并此类数组映射的可变数量,以便在传递上面定义的 m1, m2, m3 后,结果为:

        String[][] m3 = new String[][] {
{"k1", "x"},
{"k2", "b"}
{"k3", "c"}
};

最佳答案

如果我正确理解你的问题的话,这很简单。您只需平面映射所有条目并收集到映射,并使用合并函数选择后面的值:

Map<String, String> merge (String[][] ... maps) {
return Arrays.stream(maps)
.flatMap(Arrays::stream)
.collect(Collectors.toMap(a -> a[0], a -> a[1], (a, b) -> b));
}

如果你想将其转换回数组,你可以这样做

String[][] m3 = merge(maps)
.entrySet()
.stream()
.map(e -> new String[] { e.getKey(), e.getValue() })
.toArray(String[][]::new);

关于Java 8 流 - 合并 Maps 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55033758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com