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);
}
}
我想知道是否可以从 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);
}
}