gpt4 book ai didi

java - 如何将具有相似键的 List> 转换为 Map>?

转载 作者:行者123 更新时间:2023-12-01 19:32:24 24 4
gpt4 key购买 nike

我有以下列表 -

private MiniProductModel selectedProduct;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product_page);
mPresenter = new ProductPagePresenter(this);
mPresenter.initViews();
mPresenter.initProductData();

Gson gson = new Gson();
List<Map<String, String>> attributesList = selectedProduct.getAttributesList(); //this is the list

所以我得到的原始值(value)如下 -

[{value=Pink, key=Color}, {value=Yellow, key=Color}]

enter image description here

我想要实现的最终结果是一个包含一个或多个键的映射,每个键都有一个值字符串列表。例如 - 我在这里向您展示的产品有 2 种不同的颜色,因此我需要映射有一个名为 Color 的键和一个包含多个字符串值的值列表。

如何将我的列表转到所需的 map ?

编辑-

这是我当前使用 Wards 解决方案的结果 -

{value=[Sensitive Skin, Normal Skin, Combination Skin, Oily Skin, MEN], key=[Skin Type, Skin Type, Skin Type, Skin Type, Skin Type]}

key 已重复。为什么?

enter image description here

最佳答案

流(>= Java 8)

这可以通过使用 Stream 来非常优雅地完成。对于列表flatMapMap 的条目,然后使用 groupingBy 进行收集 Collection 家:

// Note that Map.of/List.of require Java 9, but this is not part of the solution
List<Map<String, String>> listOfMaps = List.of(
Map.of("1", "a1", "2", "a2"),
Map.of("1", "b1", "2", "b2")
);

final Map<String, List<String>> mapOfLists = listOfMaps.stream()
.flatMap(map -> map.entrySet().stream())
.collect(groupingBy(Entry::getKey, mapping(Entry::getValue, toList())));

mapOfLists.forEach((k, v) -> System.out.printf("%s -> %s%n", k, v));

输出为

1 -> [a1, b1]
2 -> [a2, b2]

For循环

如果流不是一个选项,您可以使用普通的旧 for 循环,例如

final Map<String, List<String>> mapOfLists = new HashMap<>();
for (Map<String, String> map : list) {
for (Entry<String, String> entry : map.entrySet()) {
if (!mapOfLists.containsKey(entry.getKey())) {
mapOfLists.put(entry.getKey(), new ArrayList<>());
}
mapOfLists.get(entry.getKey()).add(entry.getValue());
}
}

关于java - 如何将具有相似键的 List<Map<String, String>> 转换为 Map<String,List<String>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59235647/

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