Java 8列表<;V>;进入地图<;K、 V>;有功能

Java 8列表<;V>;进入地图<;K、 V>;有功能,java,dictionary,java-8,set,java-stream,Java,Dictionary,Java 8,Set,Java Stream,我试着跟随并试着在一个列表中将集合更改为映射 而不是循环(有效) 我尝试了以下解决方案: toSet().stream() .collect(Collectors.toMap(Pair.of(Function.identity(), Boolean.TRUE), this::methodAcceptingMap)); 但转换时出错: Type mismatch: cannot convert from Pair&

我试着跟随并试着在一个列表中将集合更改为映射

而不是循环(有效)

我尝试了以下解决方案:

toSet().stream()
       .collect(Collectors.toMap(Pair.of(Function.identity(), Boolean.TRUE), 
                                 this::methodAcceptingMap));
但转换时出错:

Type mismatch: cannot convert from Pair<Function<Object,Object>,Boolean> 
to Function<? super T,? extends K>
类型不匹配:无法从对转换

我不太明白你的例子。在
for
循环中,您为每个值传递相同的lambda。我看不出这有什么道理。如果确实需要,则需要传递
obj->(pair,param)->this.methodAcceptingMap(pair,param)


Collectors.toMap
接受两个函数,两个参数都不合适

你应使用:

Map<Pair<Type, Boolean>, BiConsumer<Pair<Type, Boolean>, Parameters>> map =
    set.stream()
       .collect(Collectors.toMap(el -> Pair.of(el, Boolean.TRUE), 
                                 el -> this::methodAcceptingMap));
地图=
set.stream()
.collect(Collectors.toMap(el->Pair.of(el,Boolean.TRUE)),
el->this::methodAcceptingMap);
表达式
Pair.of(t,Boolean.TRUE)
不是
函数类型。而
this::methodAcceptingMap
可以适合
双消费者的签名,但该方法需要一个函数。因此,
el->this::methodAcceptingMap
应该用作一个函数,它接受一个stream元素并返回您的
BiConsumer


注意,在这种情况下,赋值上下文(
map=
)很重要。如果没有它,这些lambda表达式的目标类型将丢失,编译将失败。

不同的错误
方法toMap(function我认为方法现在不相关,但这里是
私有void methodAcceptingMap(Pair Pair,Parameters)
上一个解决方案给我不同的错误
Lambda表达式的签名与函数接口方法apply(?super T)的签名不匹配
不同的错误
无法推断collect(collector)的类型参数,如果您交换
(pair,param)->此.methodAcceptingMap(pair,param)
使用方法refeence,即:
此::methodAcceptingMap
相同的错误,您可以尝试复制吗?如果需要,我将尝试制作一个最小的示例。您可以共享
methodAcceptingMap
的签名吗?@ernest_k我认为该方法目前不相关,但这里是
私有无效的methodAcceptingMap(成对,参数)
private Map<Pair<Type, Boolean>, BiConsumer<Pair<Type, Boolean>, Parameters>> map =
      new HashMap<>();
toSet().stream().collect(Collectors.toMap(
    obj -> Pair.of(obj, Boolean.TRUE), 
    obj -> (pair, param) -> this.methodAcceptingMap(pair, param)));
Map<Pair<Type, Boolean>, BiConsumer<Pair<Type, Boolean>, Parameters>> map =
    set.stream()
       .collect(Collectors.toMap(el -> Pair.of(el, Boolean.TRUE), 
                                 el -> this::methodAcceptingMap));