首页 > 解决方案 > 使用流的地图收集产生奇怪的编译错误

问题描述

我有这个方法:

 public void fields(TableField... s){
    // compilation error on next line
    Collection<String> fields = Arrays.asList(s).stream().map(v -> v.getValue());
    this.fields.addAll(fields);
  }

并且 TableField 很简单,看起来像:

class TableField {
  public String getKey() {
    return this.key;
  }

  public String getValue() {
    return this.value;
  }
}

但我看到了这个编译错误:

不兼容的类型。必需的集合,但“映射”被推断为流:不存在类型变量 R 的实例,因此流符合集合

标签: javacollectionscompiler-errorsjava-stream

解决方案


map返回一个转换的Stream. 如果你想要一个集合,你需要收集 Stream。例如:

Collection<String> fields =
    Arrays.asList(s).stream().map(v -> v.getValue()).collect(Collectors.toList());

推荐阅读