首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >泛型toMap收集器无法编译

泛型toMap收集器无法编译
EN

Stack Overflow用户
提问于 2016-06-08 13:32:40
回答 1查看 3.4K关注 0票数 3

我正在尝试创建一个相当简单的收集器,它将一个Stream<Map.Entry>转换成一个Map,但是javac正在抱怨泛型。不知道为什么不起作用。

代码语言:javascript
复制
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class CollectorSO {
    public static <K, V> void main(String[] args) {
        Collector<Entry<K, V>, ?, Map<K, V>> collector = Collectors.toMap(Entry::getKey, Entry::getValue);
        Stream<Entry<String, Object>> stream = Stream.empty();
        Map<String, Object> map = stream.collect(collector);
    }
}

编译器输出:

代码语言:javascript
复制
Error:(11, 41) java: no suitable method found for collect(java.util.stream.Collector<java.util.Map.Entry<K,V>,capture#1 of ?,java.util.Map<K,V>>)
method java.util.stream.Stream.<R>collect(java.util.function.Supplier<R>,java.util.function.BiConsumer<R,? super java.util.Map.Entry<java.lang.String,java.lang.Object>>,java.util.function.BiConsumer<R,R>) is not applicable
  (cannot infer type-variable(s) R
    (actual and formal argument lists differ in length))
method java.util.stream.Stream.<R,A>collect(java.util.stream.Collector<? super java.util.Map.Entry<java.lang.String,java.lang.Object>,A,R>) is not applicable
  (cannot infer type-variable(s) R,A
    (argument mismatch; java.util.stream.Collector<java.util.Map.Entry<K,V>,capture#1 of ?,java.util.Map<K,V>> cannot be converted to java.util.stream.Collector<? super java.util.Map.Entry<java.lang.String,java.lang.Object>,A,R>))

从表面上看,看起来类似,但即使使用JDK 1.8.0_60,我也遇到了问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-08 14:03:28

这是因为您为主方法声明的类型变量。它们不会在这个上下文中捕获,因此您无法使用Entry<String, Object>收集器来收集您的Entry<K, V>, ?, Map<K, V>流。你所看到的可能是这样的:

代码语言:javascript
复制
public class CollectorSO
{
    public static void main(String[] args)
    {
        Stream<Entry<String, Object>> stream = Stream.empty();
        Map<String, Object> map = stream.collect(entryToMapCollector());
    }

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

祝好运!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37704008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档