【发布时间】:2019-05-01 13:19:10
【问题描述】:
我有一个 HashMap,我用它来存储一个整数 id 和一个字符串值。
我希望能够根据用户输入的字符串从 HashMap 中删除内容。我一直这样做的方式如下:
public void pickingVehicleUp() {
System.out.println("Please enter number plate: ");
input = new Scanner(System.in);
String PLATE = input.nextLine();
Iterator<Map.Entry<Integer, String>> iter = zone_1.entrySet().iterator();
Map.Entry<Integer, String> Empty1 = iter.next();
Map.Entry<Integer, String> Empty2 = iter.next();
Map.Entry<Integer, String> Empty3 = iter.next();
Map.Entry<Integer, String> Empty4 = iter.next();
Map.Entry<Integer, String> Empty5 = iter.next();
zone_1.entrySet().removeIf(entry -> (PLATE.equals(entry.getValue())));
if (Empty1.getValue().equals(PLATE)) {
Integer key = Empty1.getKey();
zone_1.put(key, "Empty");
} else if (Empty2.getValue().equals(PLATE)) {
Integer key = Empty2.getKey();
zone_1.put(key, "Empty");
} else if (Empty3.getValue().equals(PLATE)) {
Integer key = Empty3.getKey();
zone_1.put(key, "Empty");
} else if (Empty4.getValue().equals(PLATE)) {
Integer key = Empty4.getKey();
zone_1.put(key, "Empty");
} else if (Empty5.getValue().equals(PLATE)) {
Integer key = Empty5.getKey();
zone_1.put(key, "Empty");
} else {
System.out.println("That number plate doesn't exist!");
}
}
虽然这段代码运行良好,但我认为它非常不整洁,并且可能有更有效的方法可以做到这一点,我想找到其中一种方法,因为我需要对 5 个不同的 HashMap 执行相同的方法.
【问题讨论】:
-
这个映射包含什么(作为键和值。不仅仅是类型:它们的含义)。你想达到什么目的?整个设计看起来确实有问题,但由于我们不知道您要设计什么,因此很难提供帮助。
-
我正在做一个停车结构,我使用 ArrayList 来存储车辆,并使用每个 Zone 的 HashMap 将其划分为 Zones。 Key是车位ID,车牌代表车位在哪个车位。然后当用户进入盘子时,它会移除它,然后将“空”放在它的位置。我还有另一种方法将车辆放在“空”的地方。我敢肯定有更好,更合乎逻辑的方法,这正是我首先想到的:l
-
如果你的目标是从一个车牌中找到空间ID,那么地图的键应该是车牌,值是空间ID,反之亦然。如果您真的想要或需要保持这种方式,则在条目上 循环 以找到将盘子作为值的条目。您的代码重复同一件事 5 次,并且仅在您的停车场只有 5 个车位时才有效。
-
是的,我想这样循环它,我只是不知道该怎么做,还有我会从改变它得到什么,让那个盘子成为关键?遍历它并细化密钥会比找到值更容易吗?
-
如果有map的key就不需要迭代了。您需要做的就是在地图上调用 get(key) 来获取值。这就是地图的原理。您已经知道如何在地图的 entrySet 上获取迭代器。所以使用循环来迭代它而不是调用 next() 5 次。
标签: java loops if-statement hashmap compare