Guava:LinkedHashMultimap值作为列表而不是String

Swa*_*aju 1 guava

我正在阅读有关番石榴的文章,LinkedHashMultimap并认为这可能对我有用。

我有一张地图的要求如下:

Key:Value
A    B
A    C
A    D
P    Q
P    R
Run Code Online (Sandbox Code Playgroud)

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

Key : Value 
A     List<B,C,D>
P     List<Q,R>
Run Code Online (Sandbox Code Playgroud)

尝试使用,LinkedHashMultimap但存在以下问题:

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

上方会String在地图中显示值,而不是List<String>

有人可以指出如何做到这一点。

(请注意:我知道迭代,检查和创建列表并将其插入map的常规Java核心解决方案。)

Fil*_*zak 5

正如我们在javadoc中所看到的,Multimap#entries()返回Collection<Map.Entry<K,V>>-因此,基本上,您遍历每个键/值对,而不是键/(值集)。为此,请尝试转向Multimap<K, V>standard 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());
});
Run Code Online (Sandbox Code Playgroud)

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

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