【问题标题】:java streams: Collect stream of Iterable<? extends String> [duplicate]java 流:收集 Iterable<?扩展字符串> [重复]
【发布时间】:2019-07-04 07:06:00
【问题描述】:

我收到一个编译错误:

@Override
public Map<String, T> loadAll(Iterable<? extends String> keys) {
    return Stream.of(keys)
      .collect(Collectors.toMap(Function.identity(), this::load));
}

编译器消息是:

Stream&lt;Iterable&lt;capture#1-of ? extends String&gt;&gt; 类型中的方法 collect(Collector&lt;? super Iterable&lt;capture#1-of ? extends String&gt;,A,R&gt;) 不适用于参数 (Collector&lt;String,capture#2-of ?,Map&lt;Object,Reference&gt;&gt;)

有什么解决办法吗?

【问题讨论】:

  • 你认为Stream.of(keys) 的回报是什么?
  • 你想达到什么目的,你能详细说明一下吗?

标签: java java-stream


【解决方案1】:

您似乎认为Stream.of(keys) 会创建Stream&lt;String&gt;,但事实并非如此。要从Iterable 创建Stream,您应该使用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

【讨论】:

  • 是否有任何 jdk 11 更优雅的方式来实现相同的目标?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 2019-11-07
  • 2012-08-13
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多