2013-10-09 3 views
0

Я ищу хороший способ удалить дубликаты из списка.удалить дубликаты из списка <String[]>

List<String[]> rowList = new ArrayList(); 
    rowList.add(new String[]{"1","a", "abc"}); 
    rowList.add(new String[]{"2","b", "def"}); 
    rowList.add(new String[]{"3","c", "ghi"}); 
    rowList.add(new String[]{"4","a", "jkl"}); 
    rowList.add(new String[]{"5","d", "mno"}); 
    rowList.add(new String[]{"6","e", "pqr"}); 
    rowList.add(new String[]{"7","b", "stu"}); 

Из этого rwoList, я только хочу записи: 1,2,3,5 и 6. Это означает, что у меня есть только один столбец, повышает интерес, в этом случае колонке 2 (а, б, в, ..) Это всего лишь простой пример, который я должен обрабатывать с количеством столов, которые имеют 300 столбцов и минимум 300000 строк. Другим важным моментом является то, что я не потеряю ориентацию в списке.

Примечание: Я получаю данные из файла csv.

+1

http://stackoverflow.com/questions/10370750/removing-duplicate-elements-from-a-list – Andy897

+1

Каждая общая проблема. Похоже, что никаких усилий не было сделано для Google. Таким образом, голосование. – Andy897

+0

Вы извлекаете эти данные из БД? Является ли законным иметь дубликаты или это указывает на несогласованность? – Fildor

ответ

1
List<String[]> rowList = new ArrayList<String[]>(); 
    rowList.add(new String[]{"1","a", "abc"}); 
    rowList.add(new String[]{"2","b", "def"}); 
    rowList.add(new String[]{"3","c", "ghi"}); 
    rowList.add(new String[]{"4","a", "jkl"}); 
    rowList.add(new String[]{"5","d", "mno"}); 
    rowList.add(new String[]{"6","e", "pqr"}); 
    rowList.add(new String[]{"7","b", "stu"}); 

    Set<String[]> s = new TreeSet<String[]>(new Comparator<String[]>() { 
     @Override 
     public int compare(String[] o1, String[] o2) { 
       return o1[1].compareTo(o2[1]); 
     } 
    }); 

Удаление дубликатов путем добавления установить "s"

s.addAll(rowList); 
    List<Object> res = Arrays.asList(s.toArray()); 

Печать Ваш результат

for (Object object : res) { 
     String[] array = (String[])object; 
     System.out.println(array[0]+" "+ array[1] +", "+array[2]); 
    } 

Выход

1 a, abc 
2 b, def 
3 c, ghi 
5 d, mno 
6 e, pqr 
+0

Как я понял ОП, заказ не должен меняться. Это будет сортировать по критическому столбцу, не так ли? – Fildor

+0

Я бы предложил использовать [LinkedHashSet] (http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html), потому что: «Хэш-таблица и реализация связанного списка интерфейса Set , с предсказуемым порядком итерации ». – Fildor

+0

@ Филдор Да, вы правы. Чтобы использовать LinkedHashSet, нам нужно иметь pojo с реализацией Comparator или Comparable. Я думаю, что с String [] это будет немного сложно. – Prabhakaran

0

сделать пользовательский метод isContain(List<String[]> rowList, String string)

private static boolean isContain(List<String[]> rowList, String secStr) { 
    for (String[] strings : rowList) { 
     if(strings[1].equals(secStr)){ 
      return true; 
     } 
    } 
    return false; 
} 

Проверьте этот метод, прежде чем добавить товар в List для удаления дубликатов элемента, как:

List<String[]> rowList = new ArrayList(); 
    String[] sts= new String[]{"1", "a", "abc"}; 
    boolean contain= isContain(rowList,sts[1]); 
    if(!contain){ 
     rowList.add(sts); 
    } 
Смежные вопросы