Guava:LinkedHashMultimap值为list而不是String

时间:2016-12-23 09:17:17

标签: 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解决方案,包括迭代,检查和创建列表并插入到地图中。)

1 个答案:

答案 0 :(得分:4)

正如我们在javadoc中看到的那样,Multimap#entries()返回Collection<Map.Entry<K,V>> - 所以基本上,你遍历每个键/值对,而不是键/(值集)。为此,请尝试将Multimap<K, V>转为标准Map<K, List<V>>。您可以使用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());
});