番石榴:LinkedHashMultimap 值作为列表而不是字符串

Guava : LinkedHashMultimap values as list and not String

我正在阅读 Guava 的 LinkedHashMultimap,认为它可能对我有用。

我有一个需求,我有一张地图如下:

Key:Value
A    B
A    C
A    D
P    Q
P    R

如果上面是我地图中的输入,那么我想使用 LinkedHashMultimap 创建一个地图,如:

Key : Value 
A     List<B,C,D>
P     List<Q,R>

尝试使用 LinkedHashMultimap 但它有以下问题:

    mapLen.entries().stream().forEach(entry -> {
        System.out.println("mapTemp2 key + " + entry.getKey());
        System.out.println("mapTemp2 value + " + entry.getValue());
    });

上面打印了地图中的 String 值,而不是 List<String>

谁能指出如何做到这一点。

(请注意:我知道迭代、检查和创建列表并插入地图的正常核心 java 解决方案。)

正如我们在 javadoc 中看到的那样,Multimap#entries() returns Collection<Map.Entry<K,V>> - so basically, you iterate over each key/value pair, instead of key/(value set). To do so, try turning Multimap<K, V> to standard Map<K, List<V>>. You can do that with Multimap#asMap(),因此您的代码如下所示:

mapLen.asMap().entrySet().stream().forEach(entry -> {
    System.out.println("mapTemp2 key + " + entry.getKey());
    System.out.println("mapTemp2 value + " + entry.getValue());
});

PS。我猜你错过了 ...entries 之后的括号 - 这是一种方法,而不是 属性,所以你应该使用:

//            vv DOWN HERE
mapLen.entries().stream().forEach(entry -> {
    System.out.println("mapTemp2 key + " + entry.getKey());
    System.out.println("mapTemp2 value + " + entry.getValue());
});