2013-10-09 55 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。这意味着我只有一个intrest的柱,在这种情况下塔2(A,B,C,.. ) 这只是一个简单的例子,我必须处理有300列和300000行的表格。另一个重要的观点是,我不会放松名单中的方向。

注意:我收到来自csv文件的数据。

+1

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

+1

每一个常见的问题。似乎没有努力,谷歌。所以下来投票。 – 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

由于我了解OP,订单不得改变。这将按照关键列排序,不是吗? – Fildor

+0

我建议使用[LinkedHashSet](http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html),因为:“设置界面的哈希表和链表实现,可预测的迭代次序。“ – Fildor

+0

@Fildor是的你是对的。为了使用LinkedHashSet,我们需要使用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); 
    }