【问题标题】:Javafx List<Data<Number,Number>> removeAll didn't workJavafx List<Data<Number,Number>> removeAll 不起作用
【发布时间】:2021-01-08 08:03:39
【问题描述】:

我有这个:

List<Data<Number, Number>> dataList = new ArrayList<XYChart.Data<Number,Number>>();
List<Data<Number, Number>> dataListSelected = new ArrayList<XYChart.Data<Number,Number>>();

我用一些 Data 填充它们(实际上它是一些 Double)。我为这两个列表这样做。

        for (XYZPointModel xyz : pm.getTopoPoints()) {
            topoPoints.getData().add(new Data<Number, Number>(xyz.getX(),xyz.getY()));
        }

然后我比较这两个列表。我想知道我在 dataList 中是否有一些我在 dataListSelected 中没有的数据。

System.out.println(dataList.removeAll(dataListSelected));

我得到了一个错误。 这里包含我的 2 个列表:

3 : [数据[18.367963,-0.832832,null], 数据[30.165189,-0.461874,null], 数据[18.808959,-6.575699,null]]

3 : [数据[18.367963,-0.832832,null], 数据[30.165189,-0.461874,null], 数据[18.808959,-6.575699,null]]

顺便说一句,我不知道为什么我有一个双,双,空。我不知道 null 来自哪里。 为什么我的 removeAll 不起作用?

【问题讨论】:

  • fx 是开源的——意味着源代码是可读的:) 所以如果你不理解任何特定的输出,阅读 toString 的实现将有助于回答你的附加问题(在这种情况下,阅读 java 文档应该至少给你一个关于 null 可能来自哪里的提示;)

标签: java list javafx arraylist removeall


【解决方案1】:

我认为 Data 实际上是 JavaFX.XYChart.Data,它有另一个对象节点,根据 docs。因此,这是空的。我不知道“toString”方法是否打印了节点对象的值,但看起来确实如此。

【讨论】:

    【解决方案2】:

    ArrayList(和许多其他集合)使用 contains()(它使用 equals() 方法)在 remove()/removeAll() 方法中确定是否删除对象。如果您检查以下条件:

    dataList.get(0).equals(dataListSelected.get(0)) 
    

    我的猜测是它会是假的,因此 removeAll 也会失败。

    【讨论】:

    • 是的,它返回 false。但为什么 ?这两个对象应该是相同的值。
    • 这取决于对象 XYChart.Data 中 equals() 的实现,如果他们实现了它...
    • 是的,它返回 false。但是为什么呢? 那是纯 java,与 fx 无关:equals 的默认实现是 identity - 请学习语言基础教程!
    【解决方案3】:

    1、ArrayList使用equals()删除,

    if (o.equals(elementData[i]))
                    return i;
    

    但是XYChart.Data没有覆盖equals()方法,所以Data会使用Object的方法

    public boolean equals(Object obj) {
        return (this == obj);
    }
    

    2、XYChart.Data具有三个属性

    X xValue, Y yValue, Object extraValue
    

    双,双,空

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 2015-04-23
      相关资源
      最近更新 更多