Java 流:扩展 Built-In 收集器

Java Streams: Extend Built-In Collector

我想知道是否可以从 java.util.stream.Collectors class 扩展 built-in Java 流收集器,而不是构建自定义收集器,从头开始,因此复制已经在 class.

中实现的代码

例如: 假设我有 Stream<Map.Entry<String, Long>> mapEntryStream,我想将其收集到 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 class 添加方法。但是,您可以创建自己的 returns 您想要的实用程序方法:

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