gpt4 book ai didi

java - 使用 Streaming API 转换 map 列表中的值

转载 作者:行者123 更新时间:2023-11-29 08:36:24 24 4
gpt4 key购买 nike

我有一个具有非独特键的 map 列表,并且喜欢使用 Streaming API 修改每个 map 值。结果应该是一个新列表,原来的列表必须保持不变。

示例数据:

// [ {jpg=firstImage.jpg, png=firstImage.png}, {jpg=secondImage.jpg, png=secondImage.png} ]
Map<String, String> map1 = new HashMap<>();
map1.put("jpg", "firstImage.jpg");
map1.put("png", "firstImage.png");
Map<String, String> map2 = new HashMap<>();
map2.put("jpg", "secondImage.jpg");
map2.put("png", "secondImage.png");
List<Map<String, String>> list = new ArrayList<>();
list.add(map1);
list.add(map2);

假设我想将文件名转换为大写。有了独特的值(value)观,我可以做到以下几点:

Map<String, String> copy = list.stream()
.flatMap(e -> e.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().toUpperCase()));

但是 flatMap 在键不独特时不起作用,它会破坏我的 List<Map<String, String>>结构。我知道结构不好,但我不能改变它。

预期结果:

// [ {jpg=FIRSTIMAGE.JPG, png=FIRSTIMAGE.PNG}, {jpg=SECONDIMAGE.JPG, png=SECONDIMAGE.PNG} ]

我想通过 Streaming API 实现这一点,并尽可能避免嵌套循环。

最佳答案

您不能使用 flatMap,因为这样您会在单个流中连接所有条目,从而失去将它们取回的可能性。

您需要转换List 中的每个单独元素,例如:

  List<Map<String, String>> result = list.stream()
.map(map -> map.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
e -> e.getValue().toUpperCase())))
.collect(Collectors.toList());

System.out.println(result);
// [{jpg=FIRSTIMAGE.JPG, png=FIRSTIMAGE.PNG}, {jpg=SECONDIMAGE.JPG, png=SECONDIMAGE.PNG}]

关于java - 使用 Streaming API 转换 map 列表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43848861/

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