2016-10-16 7 views
0

Ich arbeite seit Ewigkeiten daran. Ich habe eine Array-Liste, wo viele Strings in einem Index sind.Array-Liste Entfernen Index

(Index 0) Marke ist: Nissan Farbe ist: Schwarz-ID ist: KL1 Tür ist: 4
(Index 1) Marke ist: Ford Farbe ist: Red-ID ist: LL0 Tür ist: 4

Ich möchte, dass der Benutzer nur die ID eingibt und die gesamten Daten im Index entfernen. Leider funktioniert Iterator hier nicht. Irgendwelche Ideen wie das gemacht werden kann?

+0

Foremost, indem Sie: Warum ist dies ein '' Arraylist anstelle eines '' Arraylist ? Diese Daten sollten eine Klasse mit den Eigenschaften '{String-Marke, String-Farbe, String-ID, int doorCount}' oder etwas sein, mit einer 'toString()' -Methode, die den angezeigten Text generiert. Es sollte keine einzelne Zeichenkette sein, während Sie mit den Daten arbeiten ... das Entfernen von 'id' wird auf diese Weise auch fast trivialer. –

Antwort

0

Sie sollten eine Klasse erstellen, die diese Daten für Auto enthält. Nehmen Sie den folgenden Code als Beispiel. Ich habe Java 8 Feature verwendet, die intern über die Liste iterieren.

public class Main { 
public static void main(String[] args){ 
    List<Car> list = new ArrayList<>(Arrays.asList(new Car("Nissan", "Black", "KL1", "4"), 
      new Car("Ford", "Red", "LL0", "4"))); 

    String id = "KL1"; 
    list.removeIf(i -> i.getID().equals(id)); 
    list.forEach(System.out::println); // show the list after operation 
} 

static class Car { 
    public final String Brand; 
    public final String Colour; 
    public final String ID; 
    public final String Door; 

    public Car(String brand, String colour, String ID, String door) { 
     Brand = brand; 
     Colour = colour; 
     this.ID = ID; 
     Door = door; 
    } 

    public String getBrand() { 
     return Brand; 
    } 

    public String getColour() { 
     return Colour; 
    } 

    public String getID() { 
     return ID; 
    } 

    public String getDoor() { 
     return Door; 
    } 
} 

} 

aktualisieren

Sie auch tun können, dass diese

public static void main(String[] args){ 
    List<Car> list = new ArrayList<>(Arrays.asList(new Car("Nissan", "Black", "KL1", "4"), 
      new Car("Ford", "Red", "LL0", "4"))); 

    String id = "KL1"; 
    // Following code will find and remove the match from the list. 
    // this for loop do exactly what it is doing "list.removeIf(i -> i.getID().equals(id));" 
    for (int i = 0; i < list.size(); i++) { 
     if (list.get(i).getID().equals(id)) { 
      list.remove(i); 
      break; 
     } 
    } 
} 
+0

Dies ist die Ausgabe, die ich mit diesem Code bekomme [Car @ 15db9742, Car @ 6d06d69c] – tomaszsvd

3

OOP

Verwenden Sie die grundlegenden objektorientierten Ansatz.

Erstellen Sie eine Klasse zur Darstellung jeder Datenzeile mit vier Mitgliedsfeldern: Marke, Farbe, ID, Tür.

Analysieren Sie jede Textzeile, um ein Objekt dieser Klasse zu instanziieren. Sammeln Sie die Objekte in einem List.

Wiederholen Sie die Liste und fragen Sie jedes Objekt nach seiner ID ab, damit es Ihrer gewünschten ID entspricht.

Für Geschwindigkeit in dem Hinzufügen/Löschen von Elementen verwenden ein LinkedList eher als ein ArrayList als Ihre Implementierung von List.

+0

Wenn man sich dafür entscheidet, einen Iterator zu verwenden, ist die Hintergrunddatenstruktur wenig wichtig, da die Entfernungen (zumindest) in nichts außer O (n) (amortisiert) garantiert sind. – Makoto

0

Speichern der Daten in einer Zeichenfolge erinnert mich an gute alte Zeiten in den 80er Jahren. Befolgen Sie den Rat von Basil Borque und starten Sie am Ende des Arrays, um die gleichzeitige Änderung zu vermeiden. Auf diese Weise können Sie aus der Liste entfernen und mit der vorherigen fortfahren, NICHT mit der nächsten (die die Ausnahme verursachen würde)

Verwandte Themen