我已经做了很多年了。我有一个数组列表,其中许多字符串在一个索引中。
(索引0)品牌是:日产颜色是:黑色ID是:KL1门是:4
(索引1)品牌是:福特颜色是:红色ID是:LL0门是:4
我希望用户只输入ID,它应该删除索引中的整个数据。 不幸的是Iterator在这里工作了。任何想法如何做到这一点?
答案 0 :(得分:3)
使用基本的面向对象方法。
创建一个表示每行数据的类,包含四个成员字段:品牌,颜色,ID,门。
解析每一行文本以实例化该类的对象。收集List
。
循环列表并询问每个对象的ID以匹配您想要的ID。
为了加快/删除项目的速度,请使用LinkedList
而不是ArrayList
作为List
的实施。
答案 1 :(得分:0)
将数据存储在字符串中让我想起80年代的旧时光。遵循Basil Borque的建议,然后,为了避免并发修改,从数组的末尾开始。这样你可以从列表中删除并继续前一个,而不是下一个(这将导致异常)
答案 2 :(得分:0)
您应该创建包含与汽车相关的数据的类。以下面的代码为例。我使用了内部迭代列表的Java 8
功能。
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;
}
}
}
<强>更新强>
你也可以这样做
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;
}
}
}