我在以下地方遇到编译错误:
@Override
public Map<String, T> loadAll(Iterable<? extends String> keys) {
return Stream.of(keys)
.collect(Collectors.toMap(Function.identity(), this::load));
}
编译器消息为:
类型为
collect(Collector<? super Iterable<capture#1-of ? extends String>,A,R>)
的方法Stream<Iterable<capture#1-of ? extends String>>
不适用于参数(Collector<String,capture#2-of ?,Map<Object,Reference>>
)
有没有解决的办法?
答案 0 :(得分:3)
您似乎认为Stream.of(keys)
将创建一个Stream<String>
,但事实并非如此。要从Stream
创建Iterable
,应使用StreamSupport#stream
:
public Map<String, T> loadAll(Iterable<? extends String> keys) {
return StreamSupport.stream(keys.spliterator(), false)
.collect(Collectors.toMap(Function.identity(), this::load));
}
这假定您的load
方法返回T
。