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