java stream:收集Iterable <!-?的流扩展String->

时间:2019-02-10 18:17:44

标签: java java-stream

我在以下地方遇到编译错误:

@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>>

有没有解决的办法?

1 个答案:

答案 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