【问题标题】:Comparison after Typecasting类型转换后的比较
【发布时间】:2015-11-10 03:45:46
【问题描述】:

我有一个使用休眠从数据库中获取的列表。

List<Object[]> tuples = query.list();
for(Object[] tuple : tuples) {
  myObj temp = new myObj();
  temp.setID(((BigInteger)tuple[1]).longValue());
  temp.setPIndex((Integer)tuple[2]);
  temp.setFIndex((Integer)tuple[3]);
  temp.setSIndex((Integer)tuple[5]);
  temp.setLat(((BigDecimal)tuple[6]));
  temp.setLongt((BigDecimal)(tuple[7]));
  temp.setAlt((BigDecimal)(tuple[8]));
  List.add(temp);
}

其中 ID 为 Long,Pindex、FIndex、Sindex 为 Integer,Lat、Longt 和 Alt 为 Big Decimal。

另一方面,我有 csv 文件,其中包含与这些数据库对应的数据。我正在从 csv 文件中一一导入数据并将其与我的列表进行比较,但不知何故我的比较功能无法正常工作。

private boolean checkData(List<MyObject> list,MyObject1  map){

    if (list.size() == 0){
        return true;
    }

    for (int i = 0 ; i < list.size(); i++){
        MyObject temp = (MyObject)list.get(i);

        if (temp.getAlt().compareTo(map.getType2().getAlt())== 0 && temp.getLat().compareTo(map.getType2().getLat()) == 0 && temp.getLongt().compareTo(map.getType2().getLongt()) == 0 && Integer.valueOf(temp.getPIndex()) == Integer.valueOf(map.getType2().getPIndex())&&  Integer.valueOf(temp.getSIndex()) == Integer.valueOf(map.getType2().getSIndex()) && temp.getID().compareTo(map.getCommonTypeData().getID())== 0 && Integer.valueOf(temp.getFIndex()) == Integer.valueOf(map.getType2().getFIndex())){
            return false;
        }
    }

    return true;
}

我不知道为什么它对某些条目工作正常,而对其他条目不起作用。

【问题讨论】:

    标签: java hibernate csv casting compare


    【解决方案1】:

    将您的整数比较更改为使用 equals() 函数。即 integer1.equals(integer2)。您正在使用 == 比较 2 个 Integer 对象。这样做时,java 检查对象是否相等。然而,使用 equals() 方法,它会检查它们的值是否相等

    Integer a = new Integer(5);
    Integer b = new Integer(5);
    
    a.equals(b) will be true
    a == b will return false
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      相关资源
      最近更新 更多