猿问

Java 8 按键分组映射

我想按键对地图对象进行分组。我尝试使用此代码,但出现编译错误:


Non-static method cannot be referenced from a static context

我的代码:


Map<String, List<A>> getAMap() {        

    return Arrays.stream(SomeArray.values())

            .map(map -> createObject())

            .collect(Collectors.groupingBy(Map.Entry::getKey, 

                  Collectors.mapping(Map.Entry::getValue, Collectors.toList())));

}



private Map<String, A> createObject() 

    final A a = new A(some attributes);

    Map<String, A> map = new LinkedHashMap<>();

    map.put(some key, a);

    .... // add another values. 

    return map;

}

我需要类似的东西


{

"a", {a1, a2, a3},

"b", {a4, a5, a6},

}


慕莱坞森
浏览 214回答 1
1回答

料青山看我应如是

看起来您的代码在某些级别上是错误的,并且该错误消息并不是究竟发生了什么。例如createObject()返回 aMap所以你得到 a&nbsp;Stream<Map<...>>,所以显然.collect(Collectors.groupingBy(Map.Entry::getKey...行不通。您需要稍微更改代码才能使其正常工作:Arrays.stream(someArray) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flatMap(map&nbsp;->&nbsp;createObject().entrySet().stream()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.groupingBy(Entry::getKey, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collectors.mapping(Entry::getValue,&nbsp;Collectors.toList())));
随时随地看视频慕课网APP

相关分类

Java
我要回答