在Java中有效地比较两个List <object []>

时间:2017-06-08 15:03:14

标签: java list

我有两个List<Object[]>,我需要比较其中的值,并创建一个只有唯一值的最终列表。

前:

List<Object[]> list1 has n rows of object list with 5 columns
  [[val1,val2,val3,val4,val5],[val1_,val2_,val3_,val4_,val5_]]

List<Object[]> list2 has n rows of Object list with 4 columns
  [[val3_,val4_,val5_,val6_],[val2,val3,val4,val5]]

Objectlist1数组中第二至第五列元素的组合可能与Objectlist2数组中的元素匹配。当所有这些列匹配时,不应在新List中重复这些列。或者,我可以只更新list1本身的内容,而不是使用新列表。如果list2具有list1没有的唯一内容,我会将其添加到列表中。不幸的是,我的程序输出只会导致List<Object[]>。有人可以告诉我如何有效地完成这种比较吗?

1 个答案:

答案 0 :(得分:0)

数组没有equalshashcode方法,但List方法有,所以您可以使用List作为HashMap的键}。

编写一种方法来生成List<Object>以用作关键字:

  • 为您的5个元素列表,它将是new ArrayList(array).subList(1,array.length)
  • 对于您的4元素列表,它将是new ArrayList(array)

然后:

Map map = new HashMap<List<Object>, Object[]>();
for(array : fourColumnArrays) {
     map.put( keyForFourElements(array), array);
}
for(array : fiveColumnArrays) {
     map.put( keyForFiveColumnArrays(array), array);
}

map现在包含您需要的数组。