将值存储在Java Collection中

时间:2014-08-30 08:23:47

标签: java collections map java-8

我想将Id和Name存储到Java Collection中,如下所示:

121 Name_1
332 Name_9
334 Name_e
..........

我可以使用HashMap,但我需要能够使用更多这样的值来扩展集合:

121 Name_1 1
332 Name_9 1
334 Name_e 3
............

是否有Java集合可以存储这些值而不使用Object?

5 个答案:

答案 0 :(得分:5)

您应该为数据定义一个类:

public class Whatever {
    private final String name;
    private final int someValue;

    public Whatever(String name, int someValue) {
        this.name = name;
        this.someValue = someValue;
    }

    public String getName() { return name; }
    public in getSomeValue() { return someValue; }
}

然后像这样使用它:

Map<Integer, Whatever> theData = new HashMap<>();
theData.put(121, new Whatever("Name_1", 1));

(当然,给这个类及其字段提供有意义的名字!)

答案 1 :(得分:4)

您可以考虑使用诸如JSON Simple之类的库,它可以灵活地记录记录的字段数。以下是this页面的示例:

  

import org.json.simple.JSONObject;

JSONObject obj=new JSONObject();
obj.put("name","foo");
obj.put("num",new Integer(100));
obj.put("balance",new Double(1000.21));
obj.put("is_vip",new Boolean(true));
obj.put("nickname",null);
System.out.print(obj);

答案 2 :(得分:3)

@ gla3dr的评论意思是HashMap<String,List> sample = new HashMap<String,List>();

然后将数据放入列表中。

List myData = new ArrayList();

myData.add("121");
myData.add("Name_1");
myData.add("1");

然后把它放在hashmap

sample.put("key",myData);

这样你仍然可以访问列表

List myList = sample.get("key");

答案 3 :(得分:0)

以下是您可以存储这些内容的可能解决方案:

Map<Integer, List<String>> map = new HashMap<Integer, ArrayList<String>>();

然后你可以为第一个值创建一个列表:

List<String> list = new ArrayList<>();
list.add("Name_1");

然后将其与密钥一起添加到地图中:

map.put(121, list);

然后,当您想要扩展其中一个值时,可以像这样添加到列表中:

map.get(121).add("1");

当然,这意味着名称和第二个数字都存储为String s。如果您想存储不同类型,则必须将它们存储为Object

答案 4 :(得分:0)

由于您不想使用对象和集合,您可以尝试以下代码: -

        // Individual column names which can be extended
        static final String KEY_ID = "id";
        static final String KEY_NAME = "name";
        static final String KEY_NUM = "title";


        // Contains all the rows
        ArrayList<HashMap<String, Object>> mapList = new ArrayList<HashMap<String, Object>>();

        // Contains column data in individual rows
        HashMap<String, Object> map1 = new HashMap<String, Object>();
        map1.put(KEY_ID, 121);
        map1.put(KEY_NAME, "Name_1");
        map1.put(KEY_NUM, 1);

        HashMap<String, Object> map2 = new HashMap<String, Object>();
        map2.put(KEY_ID, 334);
        map2.put(KEY_NAME, "Name_e");
        map2.put(KEY_NUM, 3);

        mapList.add(map1);
        mapList.add(map2);

请注意,您可以遍历行并仅创建一个地图引用变量而不是map1和map2等等,并为每一行分配一个新的Hashmap对象,以使代码看起来更清晰。