【发布时间】:2017-11-06 10:16:11
【问题描述】:
由于某种原因,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
【问题讨论】:
-
整数或长列表是否存在同样的问题?
-
@vanje 没有测试过整数/长整数,但我认为不会有任何区别。请注意,这仅适用于 NaN 对象。