【问题标题】:Operator '==' cannot be applied to 'double[]', 'double运算符 '==' 不能应用于 'double[]', 'double
【发布时间】:2018-02-02 22:33:25
【问题描述】:

我写了这段代码:

private double[] myArray = {1.0, 2.4, 9.3};

public void testMet(double value){
    if(Arrays.asList(myArray).stream().noneMatch(a -> a==value)){
       ...
    }
}

我收到错误Operator '==' cannot be applied to 'double[]', 'double。这里有什么问题,我该如何解决?

【问题讨论】:

  • 您不能将数组与标量进行比较。

标签: java arrays list java-stream


【解决方案1】:

Arrays.asList(myArray) 返回List<double[]>myArray 作为其奇异元素;有关详细信息,请参阅here。请改用Arrays.stream()

Arrays.stream(myArray).noneMatch(a -> a==value)

【讨论】:

  • 这里的头条新闻真的在“这里了解详情”。从Arrays.asList() 的 API 文档中并没有那么明显,它会得到它对原语数组参数所做的结果。在这方面,pre-varargs 文档更加清晰。
  • @JohnBollinger 在引入可变参数之前,不会发生这种错误,因为在尝试将原始数组传递给 Arrays.asList 时出现编译器错误。回想起来,将asList 改造为可变参数方法被认为是设计错误。这就是为什么Arrays.stream 不是可变参数方法的原因,您可以通过Array.stream(array)Stream.of(some, named, items) 之间的选择来清楚地区分意图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多