2013-12-05 3 views
2

В моей программе у меня есть список массивов, содержащий в нем объекты продукта. Я хочу удалить из него дублированные объекты продукта. Есть ли какой-либо эффективный способ, отличный от циклов над каждым элементом, и сравнить их.удалить дублированные элементы из списка массивов

+1

Посмотрите на это: http://stackoverflow.com/questions/5741038/remove-duplicates-from-arraylists – Unii

ответ

2

Вы можете использовать Set, но вы потеряете первоначальный порядок списка.

Что вы можете сделать, чтобы сохранить порядок является:

Set<E> copied = new HashSet<>(); 
List<E> res = new ArrayList<>(); 
for(E e : originalList) { 
    if(!copied.contains(e)) { 
     res.add(e); 
    } 
    copied.add(e); 
} 
10

просто добавьте все элементы в set. это не позволит Повторяющиеся значения

List<Product> list=new ArrayList<>(); 
    Set<Product> set=new HashSet<>(); 
    set.addAll(list); 
1

Использование Set вместо списка будет удалить дубликаты

1

Попробуйте использовать Set вместо списка. Набор не позволит дублировать значения.

5

Вы можете просто положить элемент в Set. Установите только уникальные значения.

List<String> list=new ArrayList<>(); 
    Set<String> set=new HashSet<>(); 
    set.addAll(list); // now you have unique value set 

Если вы хотите, чтобы конечный результат как уникальное значение List только вам нужно, чтобы получить это Set, как List

List<String> uniqueValList=new ArrayList<>(set); 
5

Просто передайте список вашей коллекции Hashset конструктора и получить его обратно.

Тогда что один лайнер будет,

list = new ArrayList<E>(new HashSet<E>(list)); 
0

Советы выше использовать набор хорошо - но если вам нужно, чтобы сохранить порядок просто использовать LinkedHashSet http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html

List<String> list = ... 
Set<String> set = new LinkedHashSet<>(list); 
list.clear(); 
list.addAll(set); 

Это сохранит порядок и удалит все дубликаты.

Результат будет чувствительным к регистру, хотя в случае строк.

Смежные вопросы