如何比较Java中两个List Arrays的值

时间:2017-03-31 07:55:23

标签: java list arraylist equals

我有两个列表如下所示:

//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中的listone3.0中的listtwo进行比较,但无论我做什么,他们似乎都不相同。我想知道,我怎么能发现它们是平等的?

此外,如果我试图看到他们是彼此的一个子集:

Collections.indexOfSubList(listone,listtwo);

显然,这并不会将3.0视为等于3

所以我的问题是,如何测试3是否等于3.0

2 个答案:

答案 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)无效