Ich schrieb dieses Stück Code, um zu überprüfen, ob eine Liste der Strings vollständig in einem anderen enthalten ist und in diesem Fall die Liste löschen.Überprüfung der Liste der Strings vollständig in anderen Liste der Strings
public static void main(String[] args) {
LinkedList<String> l1 = new LinkedList<String>();
LinkedList<String> l2 = new LinkedList<String>();
l1.add("Cc");
l1.add("Dd");
l2.add("Cc");
l2.add("Dd");
l2.add("Ee");
LinkedList<LinkedList<String>> l = new LinkedList<LinkedList<String>>();
l.add(l1);
l.add(l2);
System.out.println("OUTPUT: " + filterSublist(l));
}
static List<LinkedList<String>> filterSublist(LinkedList<LinkedList<String>> l) {
List<LinkedList<String>> uniq = new LinkedList<LinkedList<String>>(l);
l.forEach(elem -> uniq.removeIf(x -> !x.equals(elem) && elem.contains(x)));
return uniq;
}
Die Funktion filterSubList sollte eine Liste der Liste von Strings zurück, die keine Listen hat, die in anderen Listen vollständig enthalten sind. Im Beispiel haben wir:
- Liste 1: "Cc, Dd"
- Liste 2: "Cc, Dd, Ee"
Da Liste 1 2 in die Liste vollständig enthalten ist, die Funktion sollte eine Liste von Listen zurück, die nur Liste 2. enthält Aber wenn ich das Programm ausführen ich habe Ausgabe, die eine Liste, die beide enthält:
OUTPUT: [[Cc, Dd], [Cc, Dd, Ee]]
das ist falsch. Gibt es einen Fehler in der Funktion filterSubList?
Gibt es einen Grund, '' equals() 'Methode nicht zu verwenden, um auf ** Gleichheit ** von zwei' Listen' zu prüfen? –
Ich weiß nicht, ob es einen besseren Weg gibt. Was schlagen Sie vor? –
Nun, Sie könnten die Methode 'equals()' verwenden, die 'true' zurückgibt, wenn die beiden verglichenen Listen gleich sind. Zum Beispiel 'System.out.println (list1.equals (list2))'. Aber beachten Sie, dass die Reihenfolge der Inhalte wichtig ist. Wenn Ihnen die Reihenfolge egal ist, können Sie ein 'HashSet' verwenden. @Walrider –