如何在Java中将地图对象添加到列表

时间:2019-01-23 12:03:20

标签: java

我创建了一个HashMap,为此我添加了usernamedisplayname,现在我将每个用户ID传递给另一个类,该类返回带有计数值的映射。现在,在此我需要返回两个地图对象。

public class ReporteeList {

    public Map<Object, Object> getReportees(String idOfEmp) {
        HashMap<Object, Object> map = new HashMap<Object, Object>();

        if (jsonarr_s.size() > 0) {

            // Get data for List array
            for (int i = 0; i < jsonarr_s.size(); i++) {

                JSONObject jsonobj_1 = (JSONObject) jsonarr_s.get(i);
                JSONObject jive = (JSONObject) jsonobj_1.get("jive");

                Object names = jsonobj_1.get("displayName");
                Object userid = jive.get("username");
                String UserId = userid.toString();

                map.put(names, userid);
                //return the map with the key value pairs

                map = count.getJiraCount(UserId);


            }

            return map;
        }
    }
}

如果根本不需要使用List,那么如何在这里实现。

谢谢。

2 个答案:

答案 0 :(得分:0)

所以我了解到您想返回一个列表中的多个地图(如果我对问题的理解不正确,请纠正我):

要创建列表:List<Map<Object, Object> myList = new ArrayList<>();

然后使用myList.add(map)将地图添加到此列表。

答案 1 :(得分:0)

直截了当的解决方案

您必须检索用户名/显示名称对 + 计数图对对的列表作为附加数据。然后,您可以检索Map的列表:

public List<Map<String, String>> getReportees(String idOfEmp) {
    if (jsonarr_s.size() <= 0)
        return Collections.emptyList();

    List<Map<String, String>> res = new ArrayList<>();

    for (int i = 0; i < jsonarr_s.size(); i++) {
        Map<String, String> map = new HashMap<>();
        String names = String.valueOf(((JSONObject)jsonarr_s.get(i)).get("displayName"));
        String userid = String.valueOf(((JSONObject)jsonobj_1.get("jive")).get("username"));
        map.put(names, userid);
        map.putAll(count.getJiraCount(userid));

        res.add(map);
    }

    return res;
}

更好的解决方案

更好的解决方案是定义数据类并将所有信息保存在其中,而不是Map

public static final class User {
    private final String userName;
    private final String displayName;
    private final Map<?, ?> jiraCount;  // do not know what data is returned with `count.getJiraCount()`

    public User(String userName, String displayName, Map<?, ?> jiraCount) {
        this.userName = userName;
        this.displayName = displayName;
        this.jiraCount = jiraCount;
    }
}

public List<User> getReportees(String idOfEmp) {
    if (jsonarr_s.size() <= 0)
        return Collections.emptyList();

    List<User> res = new ArrayList<>();

    for (int i = 0; i < jsonarr_s.size(); i++) {
        String userName = (((JSONObject)jsonobj_1.get("jive")).getString("username"));
        String displayName = ((JSONObject)jsonarr_s.get(i)).getString("displayName");
        Map<?, ?> jiraCount = count.getJiraCount(userid);
        res.add(new User(userName, displayName, jiraCount));
    }

    return res;
}