如何从字符串中获取hashmap键和值?

时间:2018-05-18 23:44:50

标签: java listview javafx hashmap

HashMap<LocalDate, String>

我有一个包含字符串的ListView(例如:“2014-05-10 example”),我想用

删除所选的hashmap
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;

上下文:来自“Inv”类的对象是您购买的东西,例如汽车,而散列图包含已经对汽车进行的所有维护。

你可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

没有通用解决方案&#34;我如何从字符串&#34;中获取密钥和值。

这取决于你是否可以:

  • 明确地将字符串解析为键和值信息,
  • 从中重新创建一个关键对象。

请注意,您需要能够构造一个对原始密钥equal的对象。如果你不能,那么问题就无法解决。

在您的情况下,如果我们可以假设日期字符串将始终采用该格式,那么@ Andreas的解决方案应该有效:

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

但这是一个反例:

    HashMap<String, String>

和这样的条目:

    "key example string"
    "key 2 another example"

现在我们无法确定密钥的终点和值的开始位置。 (&#34; 2&#34;键或值的一部分?&#34;示例&#34;?)

答案 1 :(得分:0)

我的建议:不要将ListView包含键值对用作项而不是String,并使用自定义ListCell来正确显示它们。

示例:

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());
}