है मैं एक List<Foo>
है और एक अमरूद Multimap<String, Foo>
जहाँ हम उनके Collection<String> getTags()
समारोह के प्रत्येक टैग द्वारा Foo
की समूहीकृत किया है चाहता हूँ।स्पष्ट तरीका मद के एक संपत्ति के द्वारा एक संग्रह है कि अपने आप में एक संग्रह
मैं जावा 8 का उपयोग कर रहा हूं, इसलिए लैम्बडा और विधि संदर्भ ठीक/प्रोत्साहित हैं।
उदाहरण के लिए अगर मेरे पास है:
foo1, tags=a,b,c
foo2, tags=c,d
foo3, tags=a,c,e
मैं मिलेगा एक Multimap<String, Foo>
साथ:
Multimap<String, Foo> map = list.stream().collect(
ImmutableMultimap::builder,
(builder, value) -> value.getTags().forEach(tag -> builder.put(tag, value)),
(builder1, builder2) -> builder1.putAll(builder2.build())
).build();
यह:
a -> foo1, foo3
b -> foo1
c -> foo1, foo2, foo3
d -> foo2
e -> foo3
चूंकि गुवा 21 में एक अंतर्निहित [ImmutableListMultimap.toImmutableListMultimap] है (https://google.github.io/guava/releases/21.0/api/docs/com/google/common/collect/ImmutableListMultimap.html# toImutableListMultimap-java.util.function.Function-java.util.function.Function-) कलेक्टर। –