2016-06-20 40 views
-1
import java.util.ArrayList; 
import java.util.List; 
public class mainPage { 
    public static void main(String[] args) { 
     testMethod(); 
    } 
    public static void testMethod() { 
     List<Object[]> obj = new ArrayList<Object[]>(); 

     /*START: Populating obj with test data */ 
     for (int i = 0; i <= 10; i++) { 
      if (i == 5 || i == 6) { 
       Object[] value = new Object[] { "hello", "world", "GoodEvening" }; 
       obj.add(value); 
      } else { 
       Object[] value = new Object[] { "good", "morning", "helloo" }; 
       obj.add(value); 
      } 
     } 
     /*END : Populating obj with test data */ 

     for (Object[] jj : obj) { 
      System.out.println("values: " + jj[0] + "  " + jj[1] + "  " + jj[2]); 
     } 

     // need a List<Object[]> obj with out duplicates 
    } 
} 

的上面的代码的结果是,除去在对象阵列的列表中的重复的java

values: good  morning  helloo 
values: good  morning  helloo 
values: good  morning  helloo 
values: good  morning  helloo 
values: good  morning  helloo 
values: hello  world  GoodEvening 
values: hello  world  GoodEvening 
values: good  morning  helloo 
values: good  morning  helloo 
values: good  morning  helloo 
values: good  morning  helloo 

在这里,我已经产生了采样数据和我有现在所面临的项目类似的情况。

我想重复的记录被删除,有效的方式是做什么。

的结果必然是:

values: hello  world  GoodEvening 
values: good  morning  helloo 

回答

2

的另一种方式,仍然有TreeSet但有清洁Comparator

for (int i = 0; i <= 10; i++) { 
    if (i == 5 || i == 6) { 
     obj.add(new Object[] { "hello", "world", "GoodEvening" }); 
    } else { 
     obj.add(new Object[] { "good", "morning", "helloo" }); 
    } 
} 

Set<Object[]> result = new TreeSet<>(new Comparator<Object[]>() { 
    @Override 
    public int compare(final Object[] o1, final Object[] o2) { 
     if (Arrays.equals(o1, o2)) { 
      return 0; 
     } 
     return Arrays.hashCode(o1) - Arrays.hashCode(o2); 
    } 
}); 
result.addAll(obj); 
for (Object[] array : result) { 
    System.out.println(Arrays.toString(array)); 
} 

输出:

[hello, world, GoodEvening] 
[good, morning, helloo] 
+0

工程很好。看起来很干净,如你所说。所以我们可以说这比kordirko的回答更有效率。 – siva

+0

是的,我相信 –

2

尝试:

List<Object[]> obj = new ArrayList<Object[]>(); 

// rest of your code goes here 

Comparator<Object[]> comp = new Comparator<Object[]>(){ 
    @Override 
    public int compare(Object[] o1, Object[] o2) { 
     if(o1.length != o2.length){ 
      return o1.length - o2.length; 
     } 
     for(int i = 0; i < o1.length; i++){ 
      int val = o1[i].toString().compareTo(o2[i].toString()); 
      if(val != 0){ 
       return val; 
      } 
     } 
     return 0; 
    } 
}; 

Set<Object[]> mySet = new TreeSet<>(comp); 
mySet.addAll(obj); 

for (Object[] jj : mySet) { 
    System.out.println("values: " + jj[0] + "  " + jj[1] + "  " + jj[2]); 
} 
+0

这工作得很好。 – siva