java - 列表到 Java 中的对映射
问题描述
假设我的查询结果是这样的
MyClass(name=AAA, action=action1, price=5),
MyClass(name=BBB, action=action13, price=7),
MyClass(name=AAA, action=action31, price=2)
并希望创建一个按 分组的地图name
,其中值将是一组 (k,v)action
和price
,如下所示
(AAA=((action1, 5),(action31, 2)), BBB=(action13, 7))
所以一直在尝试如下,但我收到错误->“无法从静态内容引用非静态方法”尝试使用时Map.Entry
Stream<Object> trying = results
.stream()
.flatMap(it -> {
Map<String,String> innerMap = new HashMap<>();
innerMap.put(it.getAction(),it.getPrice());
Map<String,Map<String,String>> upperMap = new HashMap<>();
upperMap.put(it.getName(), innerMap);
return upperMap.entrySet().stream();
}
)
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue,
Collectors.toList())));
解决方案
您可以提供一个Collector
withgroupingBy
来生成内部地图:(假设为Collectors.groupingBy
and静态导入Collectors.toMap
)
results.stream()
.collect(groupingBy(MyClass::getName,
toMap(MyClass::getAction,MyClass::getPrice)));
推荐阅读
- amazon-web-services - AWS 弹性推理错误:
正在编译,因为它是从调用 - typescript - 打字稿:如何使用未知字符串键迭代对象
- java - 更新用户的 Jhipster 问题
- java - 节点对象的通用数组的转换问题
- amazon-web-services - 一种更好的方法来计算 5 分钟内从 IP 地址到应用程序负载均衡器的请求数
- javascript - 如何在 vue 3 中制作全局状态?
- javascript - toString() 作为具有 NULL 原型的 Object 中的属性描述符
- python - 如何创建一个接受变量列表的 if 语句条件?
- c# - C# Blazor:倒数计时器
- excel - 运行 13 调试,应用程序