我试图以这种方式从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)的情况下返回所有列表值,并且还添加了一个额外的括号?
有谁可以帮我解决这个问题?
答案 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)
是相同的列表。这就是你输入相同内容的原因。