我有两个列表List listOne,List listTwo,我想比较两者,如果两者相同,我想将列表项添加到其他列表中ol1,否则添加到ol2。
这里的ElementRangeIndex是一个包含一些字符串值的bean类。
在比较两个列表时,需要比较bean中的每个字符串值。
我使用了以下代码但包含添加重复值,因为两个列表都有不同的对象。
public static Map<Integer, List<ElementRangeIndex>> compareLists(List<ElementRangeIndex> listOne, List<ElementRangeIndex> listTwo) {
boolean indicator = false;
List<ElementRangeIndex> listOnes = new ArrayList<ElementRangeIndex>();
List<ElementRangeIndex> listTwos = new ArrayList<ElementRangeIndex>();
List<ElementRangeIndex> listThree = new ArrayList<ElementRangeIndex>();
Map<Integer, List<ElementRangeIndex>> map = new HashMap<Integer, List<ElementRangeIndex>>();
if (listOne!= null && listTwo!=null && listOne.size() == listTwo.size()) {
for (ElementRangeIndex listTwoData : listTwo) {
for (ElementRangeIndex listOneData : listOne) {
/* if (listOneData.getNamespaceUri().equals(listTwoData.getNamespaceUri())
&& listOneData.getCollation().equals(listTwoData.getCollation())
&& listOneData.getScalarType().equals(listTwoData.getScalarType())
&& listOneData.getLocalname().equals(listTwoData.getLocalname())) {*/
if ((listOneData.getNamespaceUri().hashCode()== listTwoData.getNamespaceUri().hashCode())
&& (listOneData.getCollation().hashCode() == listTwoData.getCollation().hashCode())
&& (listOneData.getScalarType().hashCode() == listTwoData.getScalarType().hashCode())
&& (listOneData.getLocalname().hashCode() == listTwoData.getLocalname().hashCode())) {
listOnes.add(listOneData);
if(listTwos.contains(listOneData))
listTwos.remove(listOneData);
if(listTwos.contains(listTwoData))
listTwos.remove(listTwoData);
if(listThree.contains(listOneData))
listThree.remove(listOneData);
if(listThree.contains(listTwoData))
listThree.remove(listTwoData);
}else{
if(!listOnes.contains(listOneData))
if(!listTwos.contains(listOneData))
listTwos.add(listOneData);
if(!listOnes.contains(listTwoData))
if(!listThree.contains(listTwoData))
listThree.add(listTwoData);
}
}
}
map.put(1,listOnes);
map.put(2, listTwos);
map.put(3, listThree);
}
return map;
}
我的目标是将类似的列表项添加到一个列表(listOnes)中,只留给其他列表(listTwos),并将其添加到其他列表(listThree)。
谢谢, 阿琼
答案 0 :(得分:0)
如果你需要自己分手,我可能会做这样的事情:
创建列表副本并将其命名为leftOnly
。这将包含仅列在第一列中的元素。
创建列表2的副本,并命名为rightOnly
。这将包含仅列在第二列中的元素。
创建一个空列表intersectList
,其中包含两个列表中的元素。
到目前为止leftOnly
可能包含太多元素,因此我们需要对其进行过滤。为此,我们使用迭代器迭代每个元素并检查它是否也包含在rightOnly
中。如果是,我们会从leftOnly
和rightOnly
中删除该元素,并将其添加到intersectList
。
要加快该过程(列表上的contains
和remove
是线性操作),您可以使leftOnly
和rightOny
属于LinkedHashSet
类型,允许为了更快的操作,但不允许重复(在结果中使用重复会打破整个逻辑)。