2016-10-12 6 views
0

KeyAndValues having fields - String and List<T>からImmutableListMultimap<String,T>のコレクションを簡単に収集する方法をお探しですか?以下のような何かをしようとしました 、GuavaのImmutableListMultimapのJava 8コレクタ<String,T>

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

putAllList<T>Keyかかります。私はコンバイナでこれを達成する方法がわかりません。

EDIT:これについて

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

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

を 'KeyToValues'は何ですか? – Tunaki

+0

KeyAndValuesクラスが追加されました。 – sidss

+0

@Holgerは:コンパイルエラーなって、動作しません: (ImmutableListMultimap.Builder ::新しい方法、ImmutableListMultimap.Builder <文字列、リスト> ::のputAll、( B1、B2 ) - > {} 、(ビルダー) - > {})はタイプコレクターのために定義されていません – sidss

答えて

4
KeyAndValues<T>で使用可能なメソッドについて

わからないが、どのように?また

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()); 
    } 

、あなたはアキュムレータの詳細を隠すことを好むならば、あなたはこのようなものを使用することができます

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()); 
} 
関連する問題