как получить ключ и значение hashmap из строки? - PullRequest
0 голосов
/ 19 мая 2018
HashMap<LocalDate, String>

У меня есть ListView, который содержит строки (например: «Пример 2014-05-10»), и я хочу удалить выбранное хеш-изображение с помощью

hashmap.remove(LocalDate key, String value)

, но я не уверенкак получить ключ и значение из строки

Context

мой объект из класса с именем "Inv":

public class Inv {
    private String name;
    private String category;
    private LocalDate date;
    private Double price;
    private String info;
    private HashMap<LocalDate, String> mapMain;

context: объект из класса "Inv" - это то, что вы купили, например, автомобиль, и хэш-карта содержит все обслуживания, которые были выполнены с автомобилем.

Не могли бы вы помочь?

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Моя рекомендация: не используйте ListView, содержащий пары ключ-значение в качестве элементов вместо String, и используйте пользовательские ListCell s для их правильного отображения.

Пример:

Map<LocalDate, String> data = ...
ListView<Map.Entry<LocalDate, String>> listView = new ListView<>();
listView.getItems().addAll(data.entrySet());
listView.setCellFactory(l -> new ListCell<Map.Entry<LocalDate, String>>() {

    @Override
    protected void updateItem(Map.Entry<LocalDate, String> item, boolean empty) {
        super.updateItem(item, empty);
        setText((empty || item == null) ? "" : item.getKey() + " " + item.getValue());
    }

});

, в этом случае вы можете удалить выбранную запись следующим образом:

int index = listView.getSelectionModel().getSelectedIndex();
if (index >= 0) { // check, if selection exists
    Map.Entry<LocalDate, String> entry = listView.getItems().remove(index);
    // data.remove(entry.getKey(), entry.getValue());
    data.remove(entry.getKey());
}
0 голосов
/ 19 мая 2018

Не существует общего решения "как получить ключ и значение из строки".

Это зависит от того, можете ли вы:

  • однозначно разобрать строку в информацию о ключе и значении, а
  • воссоздать из нее ключевой объект.

Обратите внимание, что вам нужно иметь возможность создать объект, который будет equal по отношению к исходному ключу.Если вы не можете, то проблема не может быть решена.

В вашем случае, если мы можем предположить, что строка даты всегда будет в этом формате, тогда решение @ Andreas должно работать:

    hashmap.remove(LocalDate.parse(text.split(" ")[0]))

Но вот контрпример:

    HashMap<String, String>

и такие записи:

    "key example string"
    "key 2 another example"

Теперь мы не можем быть уверены, где заканчивается ключ и начинается значение.(Является ли «2» частью ключа или значения? Как насчет «примера»?)

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