java - 与 jdk indexOf() 相比,GWT 模拟的 indexOf() 不正确

标签 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

最佳答案

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

关于java - 与 jdk indexOf() 相比,GWT 模拟的 indexOf() 不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47134525/

相关文章:

java - 使用 Arraylist addAll() 创建一个新列表,其中包含具有不同引用的新对象

android - 如何通过 LatLng 点的 ArrayList 为标记设置动画?

java - 从 ArrayList 中删除重复的对象

java - 将插件添加到 PlayN 项目

eclipse - gwt> 导入示例项目

Java LONG 整数类型

java - 基于 n 元字符的相似性度量

java - 方法应该返回 boolean,返回 int

java - 我如何构建一个分层的 JTable?

java - 如何使用 GWT 2.1 数据表示小部件