2016-10-12 1 views
0

Suchen Sie nach einer einfachen Methode, um eine Sammlung von KeyAndValues having fields - String and List<T> bis ImmutableListMultimap<String,T> zu sammeln? etwas wie: VersuchteJava 8 Collector for Guavas ImmutableListMultimap <String,T>

zu tun nimmt
Collector.of(
      ImmutableListMultimap.Builder::new, 
      ImmutableListMultimap.Builder<String,List<T>>::putAll, 
      (b1, b2) -> b1.putAll(b2.build()), 
      (builder) -> builder.build()); 

putAllKey, List<T>. Ich bin mir nicht sicher, wie ich das im Combiner erreichen kann.

EDIT:

@Value(staticConstructor = "of") 
private static class KeyAndValues<T> { 

    private final String key; 
    private final List<T> values; 
} 
+3

Was ist 'KeyToValues'? – Tunaki

+0

KeyAndValues-Klasse hinzugefügt. – sidss

+0

@Holger: Funktioniert nicht, Compiler-Fehler bekommen: Verfahren (ImmutableListMultimap.Builder :: neu, ImmutableListMultimap.Builder > :: putAll, ( b1, b2 ) -> {} , ( Builder) -> {}) ist nicht definiert für den Typ Collector – sidss

Antwort

4

Nicht sicher über die verfügbaren Methoden auf KeyAndValues<T>, aber wie wäre das?

public static <T> Collector<KeyAndValues<T>, 
           ImmutableListMultimap.Builder<String, T>, 
           ImmutableListMultimap<String, T>> toImmutableMultimap() 
    { 
    return Collector.of(
     ImmutableListMultimap.Builder::new, 
     (b, kav) -> b.putAll(kav.getKey(), kav.getValues()), 
     (builder1, builder2) -> builder1.putAll(builder2.build()), 
     (builder) -> builder.build()); 
    } 

Alternativ, wenn Sie die Akku Details verbergen würde es vorziehen, können Sie so etwas wie folgt verwenden:

public static <T> Collector<KeyAndValues<T>, 
          ?, 
          ImmutableListMultimap<String, T>> toImmutableMultimap() 
{ 
    return Collector.of(
    ImmutableListMultimap.Builder<String, T>::new, 
    (b, kav) -> b.putAll(kav.getKey(), kav.getValues()), 
    (builder1, builder2) -> builder1.putAll(builder2.build()), 
    (builder) -> builder.build()); 
} 
Verwandte Themen