2016-06-20 3 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 
    } 
} 

das Ergebnis der obigen Code ist,entfernen Duplikate in der Liste der Objektarray in 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 

Hier i ein Beispieldaten erzeugt haben, und ich habe ein ähnliches Szenario, das in dem Projekt stehe vor.

Ich möchte die doppelten Datensätze entfernt werden, was ist der effiziente Weg, es zu tun.

muss das Ergebnis sein:

values: hello  world  GoodEvening 
values: good  morning  helloo 

Antwort

2

Ein anderer Weg, immer noch mit einem TreeSet aber mit einem Reiniger 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)); 
} 

Ausgang:

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

funktioniert gut. sieht sauber aus, wie du gesagt hast. Also können wir sagen, dass dies effizient ist als die Antwort von Kordirko. – siva

+0

ja ich glaube schon –

0

Eine Möglichkeit, es zu tun ist HashSet (https://docs.oracle.com/javase/8/docs/api/java/util/HashSet.html) zu verwenden. Es wird abgelehnt, Elemente zur Liste hinzuzufügen, wenn bereits ein identisches Element in der Liste vorhanden ist. Die Reihenfolge, in der Elemente zurückgegeben werden, wird jedoch nicht beibehalten. Möglicherweise müssen Sie Ihre eigene equals-Methode für das Objekt hinzufügen.

2

Versuchen:

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

Dies funktioniert gut. – siva