如何将对象的HashMap转换为字符串的数组列表

时间:2015-06-24 18:56:11

标签: java android arraylist hashmap

我有HashMap这样:

Hashmap<String, Object> map = new Hashmap<String, Object>();
map.put(1, {id_student:"1;2;3"});
map.put(2, {id_student:"4;5"});

我想获取值并将其放在ArrayList中:

array = [0] - 1
        [1] - 2
        [2] - 3
        [3] - 4
        [4] - 5

我试图做的事情:

private Set<String> checked = new TreeSet<String>();

String idsAlunos = "";
for (Iterator<Map.Entry<String, GPSEscolas>> it = aMap.entrySet().iterator(); it.hasNext(); ) {
    Map.Entry<String, GPSEscolas> entry = it.next();

    String id_escola = entry.getKey();
    String ids_aluno = entry.getValue().getAlunos();

    idsAlunos += ";" + ids_aluno;

    checked.add(idsAlunos.substring(1));
}

但是我从上面的代码中得到了这个结果:[4, 4;1;2;3, 4;5, 4;5;1;2;3]

3 个答案:

答案 0 :(得分:1)

你必须分步进行:

  1. 迭代Map键或将Map值作为Collection获取并迭代它。
  2. 将每个值的逗号分隔值String解析为单个标记,并将它们添加到所需的List或Set值中。
  3. 获得值后对值列表进行排序。
  4. 如果您没有重复,请使用套装。

    看起来像JSON。你在使用JSONSimple吗?也许你应该这样。

    以下是一个例子。

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * MapToArrayExample
     * User: mduffy
     * Date: 6/24/2015
     * Time: 3:17 PM
     * @link http://stackoverflow.com/questions/31034737/how-to-convert-a-hashmap-of-objects-into-an-arraylist-of-strings/31034794?noredirect=1#comment50094533_31034794
     */
    public class MapToArrayExample {
    
        public static void main(String[] args) {
            Map<Integer, String> data = new HashMap<Integer, String>() {{
                put(1, "3, 2, 3, 3, 1");
                put(2, "4, 5, 5, 6, 7");
            }};
            List<String> result = parseMapOfJson(data);
            System.out.println(result);
        }
    
        public static List<String> parseMapOfJson(Map<Integer, String> map) {
            List<String> values = new ArrayList<String>();
            for (Integer key : map.keySet()) {
                String csv = map.get(key);
                String [] tokens = csv.split(",");
                for (String token : tokens) {
                    values.add(token.trim());
                }
            }
            Collections.sort(values);
            return values;
        }
    }
    

答案 1 :(得分:1)

好的,我明白了,就像这样:

idsAlunos = "";

for (Iterator<Map.Entry<String, GPSEscolas>> it = aMap.entrySet().iterator(); it.hasNext(); ) {
   Map.Entry<String, GPSEscolas> entry = it.next();

   String id_escola = entry.getKey();
   String ids_aluno = entry.getValue().getAlunos();

   idsAlunos += ";" + ids_aluno;

   String[] array = idsAlunos.substring(1).split(";");

   list = new ArrayList<String>(Arrays.asList(array));

}

System.out.println(list);

这给了我想要的东西,即:[4,5,1,2,3]

答案 2 :(得分:0)

试试这个:

    HashMap<String, String> map = new HashMap<String, String>();
    map.put("1", "1;2;3");
    map.put("2", "4;5");

    Set<String> checked = new TreeSet<String>();

    for (Iterator i = map.entrySet().iterator(); i.hasNext();) {
        Map.Entry<String, String> e = (Map.Entry<String, String>) i.next();
        checked.addAll(Arrays.asList(e.getValue().split("\\s*;\\s*")));
    }
    System.out.println(checked);