首页 > 解决方案 > 列表到 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)actionprice,如下所示

(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())));

标签: javajava-8java-stream

解决方案


您可以提供一个CollectorwithgroupingBy来生成内部地图:(假设为Collectors.groupingByand静态导入Collectors.toMap

results.stream()
       .collect(groupingBy(MyClass::getName,
                           toMap(MyClass::getAction,MyClass::getPrice)));       

推荐阅读