У меня есть два списка List listOne, List listTwo, и я хочу сравнить оба, и если оба они одинаковые, я хочу добавить элемент списка в какой-то другой список ol1 else add to ol2.Как сравнить два списка в java
Здесь ElementRangeIndex является классом 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).
Спасибо, Арджун
Используйте класс коллекций Apache Commons 'CollectionUtils', который предоставляет методы для извлечения элементов, содержащихся в обеих коллекциях или только в одном. Используйте «LinkedHashSet» или что-то подобное, чтобы сохранить порядок вставки при отклонении дубликатов (если вам это нужно). – Thomas
http://stackoverflow.com/questions/2762093/java-compare-two-lists –