在Java中使用for循环填充HashMap

时间:2018-07-19 08:44:30

标签: java hashmap

我正在尝试使用for循环填充 LinkedHashMap ,以便在我的 jsf 页面中使用它,但是使用哈希表的“ put ”方法触发新的“ put ”方法时,将覆盖哈希图中保存的值。

方法就是这样;

public static List<String> valuesOfEnum() throws JsonProcessingException {
        Map<String, Object> newArray = new LinkedHashMap<String, Object>();
        List<String> jsonObj = new ArrayList<String>();
        String json = null;
        for(LimanTipi limanTipi : values()){
            newArray.put("id", limanTipi.getId());
            newArray.put("value", limanTipi.getValue());
            json = new ObjectMapper().writeValueAsString(newArray);
            jsonObj.add(json);
        }
        return jsonObj;
    }

这是jsf代码;

<f:selectItems value="#{denizlimaniViewController.limanTipleri}" var="limanTipleri" itemValue="#{limanTipleri.id}" itemLabel="#{limanTipleri.value}"/>

使用这种方法,由于无法正确填充哈希图,因此将哈希图转换为列表,但这不是我想要的,因为我无法在<f:selectItems>中使用此列表。

我需要使用 itemValue itemLabel 代表哈希图中的“ id ”和“ value ”属性。

有没有办法解决这个问题?

谢谢

1 个答案:

答案 0 :(得分:1)

密钥获取已被覆盖,因为您始终拥有密钥idvalue。修改您的代码,如下所示:

for(LimanTipi limanTipi : values()){
            newArray.put(limanTipi.getId(), limanTipi.getValue());
            json = new ObjectMapper().writeValueAsString(newArray);
            jsonObj.add(json);
        }

编辑:

希望limanTipleri是地图newArray本身。然后,您需要修改代码,如下所示:

<f:selectItems value="#{denizlimaniViewController.limanTipleri.entrySet()}" 
               var="limanTipleri" 
               itemValue="#{limanTipleri.key}" itemLabel="#{limanTipleri.value}" />