Ich habe eine ArrayList<String>
und ich möchte wiederholte Zeichenfolgen daraus entfernen. Wie kann ich das tun?
Antworten
Zu viele Anzeigen?
Gil SH
Punkte
3571
Hier ist eine Lösung, die mit jedem Objekt funktioniert:
public static <T> List<T> clearDuplicates(List<T> messages,Comparator<T> comparator) {
List<T> results = new ArrayList<T>();
for (T m1 : messages) {
boolean found = false;
for (T m2 : results) {
if (comparator.compare(m1,m2)==0) {
found=true;
break;
}
}
if (!found) {
results.add(m1);
}
}
return results;
}
Kirguduck
Punkte
659
Kotlin
val list = listOf('a', 'A', 'b', 'B', 'A', 'a')
println(list.distinct()) // [a, A, b, B]
println(list.distinctBy { it.uppercaseChar() }) // [a, b]
von hier kotlinlang
Ravi Vital
Punkte
1
Würde so etwas besser funktionieren?
public static void removeDuplicates(ArrayList<String> list) {
Arraylist<Object> ar = new Arraylist<Object>();
Arraylist<Object> tempAR = new Arraylist<Object>();
while (list.size()>0){
ar.add(list(0));
list.removeall(Collections.singleton(list(0)));
}
list.addAll(ar);
}
Das sollte die Reihenfolge beibehalten und auch nicht quadratisch in der Laufzeit sein.
neo7
Punkte
634
Hier ist meine Antwort, ohne eine andere Datenstruktur wie Set oder Hashmap usw. zu verwenden.
public static <T> ArrayList<T> uniquefy(ArrayList<T> myList) {
ArrayList <T> uniqueArrayList = new ArrayList<T>();
for (int i = 0; i < myList.size(); i++){
if (!uniqueArrayList.contains(myList.get(i))){
uniqueArrayList.add(myList.get(i));
}
}
return uniqueArrayList;
}
sharkbait
Punkte
2791
Die Lösung von @jonathan-stafford ist in Ordnung. Aber die Reihenfolge der Liste wird nicht beibehalten.
Wenn Sie die Reihenfolge der Liste beibehalten wollen, müssen Sie dies verwenden:
public static <T> void removeDuplicate(List <T> list) {
Set <T> set = new HashSet <T>();
List <T> newList = new ArrayList <T>();
for (Iterator <T>iter = list.iterator(); iter.hasNext(); ) {
Object element = iter.next();
if (set.add((T) element))
newList.add((T) element);
}
list.clear();
list.addAll(newList);
}
Es geht nur darum, die Antwort zu vervollständigen. Sehr gut!