簡體   English   中英

Java Streams:擴展內置收集器

[英]Java Streams: Extend Built-In Collector

我想知道是否可以從java.util.stream.Collectors類擴展內置 Java Stream 收集器,而不是從頭開始構建自定義收集器,從而復制已經在該類中實現的代碼.

例如:假設我有Stream<Map.Entry<String, Long>> mapEntryStream並且我想將其收集到Map<String, Long>類型的Map<String, Long>

我當然可以這樣做:

mapEntryStream.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

但是假設我想要像這樣推斷的鍵和條目:

//Not a real Java Collectors method
mapEntryStream.collect(Collectors.toMap());

那么我如何制作一個收集器,就像上面的那個一樣,它不需要參數但調用Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)

請注意:這不是關於是否應該制作這樣的收藏家的問題——只有在可以制作的情況下。

您不能向Collectors類添加方法。 但是,您可以創建自己的實用程序方法來返回您想要的內容:

import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collector;
import java.util.stream.Collectors;

public class MoreCollectors {

  public static <K, V> Collector<Entry<K, V>, ?, Map<K, V>> entriesToMap() {
    return Collectors.toMap(Entry::getKey, Entry::getValue);
  }
}

暫無
暫無

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

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