簡體   English   中英

Java 8 Collector for Guava的ImmutableListMultimap <String,T>

[英]Java 8 Collector for Guava's ImmutableListMultimap<String,T>

尋找一種簡單的方法來收集KeyAndValues having fields - String and List<T>ImmutableListMultimap<String,T>KeyAndValues having fields - String and List<T>集合嗎? 試圖做類似的事情,

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

putAll采用KeyList<T> 我不確定如何在合並器中實現這一點。

編輯:

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM