当前位置: 首页 > 知识库问答 >
问题:

使用流的地图收集产生奇怪的编译错误

桂阳文
2023-03-14

我有这个方法:

 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的实例,因此流符合集合

共有3个答案

姜鹏程
2023-03-14

在这里使用流没有任何意义。仅使用传统的for循环将生成更简洁、性能更高的代码:

for (v : s) fields.add(v.getValue());
蒲寂离
2023-03-14

您需要收集那里的元素,从而推断出类型:

Collection<String> fields = Arrays.stream(s) //  Arrays.asList(s).stream()
        .map(TableField::getValue) // map(v -> v.getValue())
        .collect(Collectors.toList()); // or any other collection using 'Collectors.toCollection(<type>::new)'

孙泳
2023-03-14

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

Collection<String> fields =
    Arrays.asList(s).stream().map(v -> v.getValue()).collect(Collectors.toList());
 类似资料:
  • 我试图使用Boost的program_options库来构建一个简单的命令行应用程序库,但它失败了,出现了一个非常奇怪的错误。以下是所有有问题的代码(是的,非常简单): 发生的编译错误是: 错误C2679:二进制' 错误C2228:左边的'。“失败”必须具有类/struct/union c:\work\digitalbp\projects\releasedev\nsdk\u 4\u 0\dev\s

  • 问题内容: 我正在实施一个非常简单的易感性感染恢复模型,该模型具有稳定的工作量,可以用于闲置的副项目- 通常是一项非常琐碎的任务。但是我遇到了使用PysCeS或SciPy的求解器错误,它们都使用lsoda作为其基础求解器。这仅在参数的特定值时发生,我为之困惑。我使用的代码如下: 这将产生以下错误: 通常,当我遇到这样的问题时,我设置的方程组最终有问题,但是我都看不到任何问题。奇怪的是,如果将mu更

  • 问题内容: 我正在尝试使用SQL设置分页。我想要每页3个结果,这是我所做的: 我检查了很多次,这不是很复杂,但是我的结果并不是我所期望的: 第1页: 第2页 : 第3页: 第4页: 如您所见,第2、3和4页的结果相同…当我一次取4页时: 结果 : 也许我遗漏了一些东西或排序结果以及使用限制/偏移量不兼容,我不知道出了什么问题。 问题答案: 这里的问题是所有行的命中计数均为,因此使用时它们的位置是不

  • 我对这两种方法的不同感到困惑,但我肯定我做错了什么。 下面我有一个工作示例和一个非工作示例。在工作示例中,我将变量测试器指定为“映射”,在非工作示例中,我尝试将其指定为映射。在第二个示例中,错误如下所示: 我没有看到tester变量的类型与myMap变量的类型之间的联系。 虽然Eran发布了对我的原始版本的解释,但它表明我应该使用收藏家。托马普而不是收藏家。groupBy,因为我的目标是为从“pr

  • 问题内容: 让我们使用Eclipse Mars.2软件包中的ECJ编译器编译以下代码: 编译命令如下: 成功编译后,让我们使用来检查生成的类文件。最有趣的是为lambda 生成的合成方法: 看到这个条目我感到很惊讶。JVM规范涵盖了 LocalVariableTypeTable属性,并说: 该索引处的条目必须包含表示字段签名的结构(第4.4.7节),该签名对源程序中的局部变量的类型进行编码(第4.

  • 以下代码是尝试使用lodash fp制作我的2048版本(游戏)的开始。我习惯了普通的洛达斯,但这是我第一次接触fp口味。 它使用两个功能实现将一行的瓷砖向右推的操作: 将该行向右推,前提是有空格(由值0表示)。实际上,这相当于把所有的零放在左边。 合并成对的相同值的连续磁贴,生成一个空空间和一个值加倍的新磁贴。(从那一步)。 这些函数使用方法,该方法从右向左遍历磁贴。 似乎工作正常。例如,将转换