Java 8 按键分组映射

emo*_*ssi -1 java lambda grouping java-8 collectors

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

Non-static method cannot be referenced from a static context
Run Code Online (Sandbox Code Playgroud)

我的代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

我需要类似的东西

{
"a", {a1, a2, a3},
"b", {a4, a5, a6},
}
Run Code Online (Sandbox Code Playgroud)

Eug*_*ene 6

看起来您的代码在某些级别上是错误的,并且该错误消息并不是确切发生的情况。

例如createObject()返回 aMap所以你得到 a Stream<Map<...>>,所以显然.collect(Collectors.groupingBy(Map.Entry::getKey...是行不通的。您需要稍微更改一下代码才能使其工作:

Arrays.stream(someArray)
            .flatMap(map -> createObject().entrySet().stream())
            .collect(Collectors.groupingBy(Entry::getKey,
                    Collectors.mapping(Entry::getValue, Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)