Как мне удалить / заменить значение HashMap на основе значения? - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть 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 ]

1 голос
/ 23 апреля 2019

Вы можете получить ключ по значению и, если он есть, удалить его.

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

Но я бы предложил использовать PLATE в качестве ключа, поскольку вы выполняете операции на его основе.

Надеюсь, это поможет

0 голосов
/ 23 апреля 2019

Если я вас правильно понял, вы хотели бы удалить запись с карты на основе значения. В этом случае вы можете использовать Map.values и Collection.remove методы:

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

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

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

это самый простой случай. Однако вы можете рассмотреть возможность использования таблички в качестве ключа и парковочного места в качестве значения, если вы собираетесь выполнять поиск по номеру таблички. Так что вместо

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

Что на самом деле может быть тем, что вы действительно ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...