为什么子列表不能在List <object>上工作?

时间:2016-03-18 16:05:04

标签: java arrays arraylist hashmap

我试图以这种方式从List<Object>获取subList,

在进行子列表之前我的实际地图数据是这样的,

Converted Map{Demography=[[D11,D22,D99]], Paper=[[[EEE,RRR,TTT],[QQQ,WWW,EEE],[UUU,III,OOO]]], Hunt=[[HUT,HUG,HUE]], Camp=[[COL,CIL,CPL]]

我的代码就是这个,

public class PosTest {
    HashMap<String, Object> uiMap = new HashMap<String, Object>();
    public static void main(String[] args) {
        PosTest mm = new PosTest();
        mm.getSupplierInfo();
    }
    public void getSupplierInfo()
    {
        HashMap<String, Object> jsonMap = new HashMap<String, Object>();
        jsonMap.put("Camp","[COL,CIL,CPL]");
        jsonMap.put("Demography","[D11,D22,D99]");
        jsonMap.put("Hunt","[HUT,HUG,HUE]");
        jsonMap.put("Paper","[[EEE,RRR,TTT],[QQQ,WWW,EEE],[UUU,III,OOO]]");

        Iterator<Entry<String, Object>> i = jsonMap.entrySet().iterator();
        Entry<String, Object> e = null;
        List<Object> eValue = null;
        while (i.hasNext()) {
            e = i.next();
            eValue = Arrays.asList(e.getValue());
            uiMap.put(e.getKey(), eValue.subList(0, 1));
        }  
        System.out.println("Converted Map" + uiMap);        

    } 
}

然后,当我打电话给uiMap.put(e.getKey(), eValue.subList(0, 1));时,我只能从列表中得到0.1的值,即

Converted Map{Demography=[D11,D22], Paper=[[EEE,RRR,TTT],[QQQ,WWW,EEE]], Hunt=[HUT,HUG]], Camp=[COL,CIL]}

但该代码的输出为Converted Map{Demography=[[D11,D22,D99]], Paper=[[[EEE,RRR,TTT],[QQQ,WWW,EEE],[UUU,III,OOO]]], Hunt=[[HUT,HUG,HUE]], Camp=[[COL,CIL,CPL]]}

为什么在没有子列表(0,1)的情况下返回所有列表值,并且还添加了一个额外的括号?

有谁可以帮我解决这个问题?

2 个答案:

答案 0 :(得分:0)

由此:

jsonMap.put("Hunt","[HUT,HUG,HUE]");

你没有把列表作为值,你把唯一的字符串。这个:

eValue = Arrays.asList(e.getValue());

没有神奇地将"[COL,CIL,CPL]"解析为列表,它只创建包含该单个字符串的单项列表,subList(0, 1)返回自身(因为它只有一个项目)。

因此,首先将jsonMap的类型更改为Map<String, List<String>>,并按以下方式放置项目:

jsonMap.put("Hunt", Arrays.asList("HUT", "HUG", "HUE"));
jsonMap.put("Hunt", Arrays.asList("D11", "D22", "D99"));
//...

然后,要获得子列表,请致电:

uiMap.put(key, jsonMap.get(key).subList(0, 1));

答案 1 :(得分:0)

您是否认为Java可以将"[COL,CIL,CPL]"解释为列表?这不可以。它是String类型的一个对象。

当您调用Arrays.asList()时,由于varargs,Java首先生成一个包含一个String元素的数组,然后asList()将其转换为一个元素的列表。此列表的subList(0, 1)是相同的列表。这就是你输入相同内容的原因。