Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通用toMap收集器无法编译_Java_Generics_Java 8_Java Stream_Collectors - Fatal编程技术网

Java 通用toMap收集器无法编译

Java 通用toMap收集器无法编译,java,generics,java-8,java-stream,collectors,Java,Generics,Java 8,Java Stream,Collectors,我试图创建一个相当简单的方法,将流转换为映射,但是javac抱怨泛型。我不明白为什么它不起作用 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 <

我试图创建一个相当简单的方法,将
转换为
映射
,但是javac抱怨泛型。我不明白为什么它不起作用

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);
    }
}
import java.util.Map;
导入java.util.Map.Entry;
导入java.util.stream.Collector;
导入java.util.stream.collector;
导入java.util.stream.stream;
公共类收藏家{
公共静态void main(字符串[]args){
Collector=Collectors.toMap(条目::getKey,条目::getValue);
Stream=Stream.empty();
Map Map=stream.collect(收集器);
}
}
编译器输出:

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>))
错误:(11,41)java:找不到适合collect的方法(java.util.stream.Collector)
方法java.util.stream.stream.collect(java.util.function.Supplier、java.util.function.BiConsumer、java.util.function.BiConsumer)不适用
(无法推断类型变量)R
(实际参数列表和正式参数列表长度不同))

方法java.util.stream.stream.collect(java.util.stream.Collector这是因为您为主方法声明的类型变量。它们不会在该上下文中捕获,因此您无法使用
条目,映射
收集器来收集
条目
流。您所看到的可能是这样的:

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);
    }
}
公共类收集器o
{
公共静态void main(字符串[]args)
{
Stream=Stream.empty();
Map Map=stream.collect(entryToMapCollector());
}
专用静态收集器入口TomapCollector()
{
返回Collectors.toMap(条目::getKey,条目::getValue);
}
}
祝你好运