与jdk indexOf()

时间:2017-11-06 10:16:11

标签: java arraylist gwt

出于某种原因,GWT模拟(客户端)jdk方法indexOf()没有按预期工作。

示例:

我有一个包含3个NaN对象的列表:

List<Double> doubleList = new ArrayList<Double>();
doubleList.add(Double.NaN);
doubleList.add(Double.NaN);
doubleList.add(Double.NaN);

我检索最小值,即Double.NaN:

Double minValue = Collections.min(doubleList); //minValue = Double.NaN

到目前为止,一切都在客户端和服务器端按预期工作。

现在我正在尝试获取minValue的索引:

Integer index = doubleList.indexOf(minValue);

这就是乐趣的开始。服务器端(简单单元测试)jdk ArrayList类方法indexof()返回0,应该如此。虽然模拟的ArrayList类(客户端)返回-1这是不正确的,因为在列表中找不到值时应返回-1,显然不是这种情况。

任何想法为什么会发生这种情况?

GWT indexOf():

  int indexOf(Object o, int index) {
    for (; index < array.length; ++index) {
      if (Objects.equals(o, array[index])) {
        return index;
      }
    }
    return -1;
  }

GWT模仿class ArrayList

1 个答案:

答案 0 :(得分:0)

In JavaScript NaN === NaN is false但在Java Double.NaN.equals(Double.NaN)中是正确的。因此,方法indexOf()中的比较对NaN不起作用。在这种情况下,正确的实现将使用JavaScript函数isNaN()