如何根据值是什么删除/替换HashMap值?

时间:2019-04-23 14:13:58

标签: java if-statement hashmap user-input

我有一个HashMap,其中显示了一个停车位作为键,并显示了一个车号牌,我有它,以便用户在取回车辆时输入车号牌,然后喜欢删除/替换刚刚输入的车牌号的值。

例如,输出将来自:

Parking Space: 1, Vehicle Registration: ABCD123

对此:

Parking Space: 1, Vehicle Registration: "Empty" / null

tempVehicle.plate是一个字符串,用于保存用户输入的号码牌。

    public int key = 1;
    HashMap<Integer, String> zone_1 = new HashMap<Integer, String>();

    public void addToZone1(Vehicle tempVehicle){
        if (key < 5) {
            zone_1.put(key, tempVehicle.plate);
            key++;
            System.out.println(zone_1.toString());
        }
        else {
            System.out.println("There is no more room in this Zone!");
        }

    }

这是我唯一能够解决的问题,我希望有可能,我应该事先仔细考虑一下。

    public void pickingVehicleUp() {
        System.out.println("Please enter number plate: ");
        input = new Scanner(System.in);
        String PLATE = input.nextLine();

        if (zone_1.containsValue(PLATE)) {

        }
    }

我想添加到if语句中或完全更改,以完成这项工作所需要做的一切,

2 个答案:

答案 0 :(得分:1)

您可以按值获取密钥,如果存在则将其删除。

int key=-zone_1.stream()
      .filter(e -> e.getValue().equals(PLATE))
      .map(Map.Entry::getKey)
      .findFirst()
      .orElse(null);
zone_1.remove(key);

但是我建议您在基于PLATE进行操作时将其用作键。

希望有帮助

答案 1 :(得分:0)

如果我对您的理解正确,则希望根据一个值从地图中删除一个条目。在这种情况下,您可以使用Map.valuesCollection.remove方法:

// {1=ABCD123, 2=XYZ8910} contents of the map

zone_1.values().remove("XYZ8910");

System.out.println(zone_1); // {1=ABCD123}

这是最简单的情况。但是,如果要按车牌号进行查找,则可以考虑使用Plate作为键,并将停车位作为值。因此,而不是

  {1=ABCD123, 2=XYZ8910}
use
  {ABCD123=1, XYZ8910=2}

实际上可能正是您真正想要的。