我有两个列表如下所示:
//list one = {1,2,3,4}
listone.add(1);
listone.add(2);
listone.add(3);
listone.add(4);
// list two = {3.0,4}
listtwo.add(3.0);
listtwo.add(4);
我尝试将3
中的listone
与3.0
中的listtwo
进行比较,但无论我做什么,他们似乎都不相同。我想知道,我怎么能发现它们是平等的?
此外,如果我试图看到他们是彼此的一个子集:
Collections.indexOfSubList(listone,listtwo);
显然,这并不会将3.0
视为等于3
。
所以我的问题是,如何测试3
是否等于3.0
?
答案 0 :(得分:0)
将无类型列表转换为双重列表:
Stream<Double> s1 = listone.stream().map(o->((Number)o).doubleValue());
List<Double> dblListone = s1.collect(Collectors.toList());
Stream<Double> s2 = listtwo.stream().map(o->((Number)o).doubleValue());
List<Double> dblListtwo = s2.collect(Collectors.toList());
答案 1 :(得分:0)
请勿使用==
来比较列表内容。请改用compareTo(obj)
。
示例:
A)创建两个列表
ArrayList<Double> myList = new ArrayList<Double>();
//... fill list
ArrayList<Integer> myList2 = new ArrayList<Integer>();
//....fill list
B)按相同顺序对它们进行排序
C)循环并使用.compareTo()
for(int i=0; i<myList.size(); i++){
if(myList.get(i).compareTo(Double.valueOf(myList2.get(i)))==0){
//numbers are equal
}
}
当然,此解决方案要求两个列表的大小相同。
myList.get(i) == (Double)myList2.get(i
)无效