2015-12-10 3 views
0

Я проверил множество примеров, но я не мог применить свои переменные. У меня есть ArratyList Список списков.Удалить дубликаты из списка в Arraylist в java

ArrayList<List<String>> bulkUploadList = new ArrayList<List<String>>(); 

и это выглядит следующим образом:

[идентификатор, название, теги, описание]

[4291483113.0000000000000, Camden, camdentown;london, NoValue] 
[4292220054.0000000000000, IMG_2720, NoValue, NoValue] 
[4292223824.0000000000000, IMG_2917, london;camdentown, NoValue] 
[4292224728.0000000000000, IMG_2945, London;CamdenTown, NoValue] 

Я хочу, чтобы удалить те строки, которые имеют одинаковые названия и те же тег. Я не знаю, как работать с HashSet, так как у меня есть ArrayList из списка строк.

+4

Почему у вас есть арраист струн в первую очередь? Создайте класс для хранения этих данных. –

+0

Не могли бы вы объяснить больше, что вы имеете в виду, удерживая их в классе. Это результат запроса выбора из БД, и я собираюсь удалить дубликаты и сохранить в другой таблице в DB – Raha1986

+1

Почему вы делаете удаление дубликатов в Java? У вас есть двигатель RDBMS: используйте его! – fge

ответ

1

Не лучшее решение, но вы можете начать с этого:

ArrayList<List<String>> bulkUploadList = new ArrayList<List<String>>(); 
    ArrayList<List<String>> result = new ArrayList<List<String>>(); 

    HashSet<String> hashSet = new HashSet<>(); 

    for(List<String> item : bulkUploadList) { 
     String title = item.get(1); 
     String tags = item.get(2); 
     String uniqueString = (title + "#" + tags).trim().toUpperCase(); 

     if(!hashSet.contains(uniqueString)) { 
      result.add(item); 
      hashSet.add(uniqueString); 
     } else { 
      System.out.println("Filtered element " + uniqueString); 
     } 
    } 
+2

Пожалуйста, помните, что ваш код чувствителен к регистру. – Tom

+1

Я добавил преобразование в верхний регистр и операцию обрезки, спасибо. Мы также можем обрезать каждый из параметров отдельно –

+0

Я тоже это сделал, спасибо :) – Raha1986

0

Как было предложено в одном из комментариев, вы должны создать класс для данных, убедитесь, что класс реализации Equals(), а затем использовать HashSet для удаления дубликатов. Как это.

class Foo { 
String id; 
String title; 
String tags; 
String description; 

public boolean equals(Foo this, Foo other) { 
    return this.id.equals(other.id) 
     && this.title.equals(other.title) 
     && etc. 
} 

, то вы можете удалить Dups с

Set<Foo> set = new LinkedHashSet<Foo>(list); 

, как наборы не позволяют дублирования, а равно() метод используется для проверки.

Здесь вы должны использовать связанныйHashSet, потому что вы хотите сохранить заказ (в соответствии с комментарием, сделанным вами в другом месте).

Вы также должны реализовать метод hashcode(), соответствующий equals().

+0

спасибо за письмо, что я собираюсь использовать его, чтобы узнать, как его использовать :) – Raha1986

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