java - 如何翻转列表
问题描述
我有以下列表 -
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=Pink, key=Color}, {value=Yellow, key=Color}]
我想要实现的最终结果是一个包含一个或多个键的映射,每个键都有一个值字符串列表。例如 - 我在这里向您展示的产品有 2 种不同的颜色,所以我需要地图有一个名为 Color 的键和一个包含多个 String 值的值列表。
我怎样才能把我的名单变成想要的地图?
编辑 -
这是我目前使用 Wards 解决方案的结果 -
{value=[Sensitive Skin, Normal Skin, Combination Skin, Oily Skin, MEN], key=[Skin Type, Skin Type, Skin Type, Skin Type, Skin Type]}
密钥已复制。为什么 ?
解决方案
流 (>= Java 8)
这可以通过对 s 的条目使用 aStream
来非常优雅地完成List
,然后使用收集器收集:flatMap
Map
groupingBy
// 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 循环,例如
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());
}
}
推荐阅读
- c# - 从inkCanvas保存图片的问题
- github - 验证 GitHub OAuth 令牌是否属于特定 ClientID
- java - 如何将原生 Android 代码添加到 Gluon Mobile 框架?- 低功耗蓝牙
- c++ - 生成“魔方”算法(算法来自一本书)
- python-3.x - 通过 for 循环内的“id”索引值拆分数据帧
- react-router - 如何为 react-router 配置 Caddy 服务器
- jooq - java.lang.ClassNotFoundException:org.jooq.codegen.JavaGenerator JOOQ 3.8
- spring-boot - Docker 化 Spring Boot 应用程序时出现 ClassNotFoundException
- python - 在 Python 中导入深度嵌套的模块
- javascript - d3 函数 (d) 未被调用