我在Java中创建了一个ArrayList
:
List<String> listValuesFromMap = new ArrayList<String>();
我使用entry.getValue()
方法填充值:
listValuesFromMap.add((String) entry.getValue().toString());
我有这样的事情:
"names" : ["[name1, name2, name3]"]
如何使用引号删除这些额外括号以仅获取:
[name1, name2, name3]
代码的全部内容:
@SuppressWarnings("unchecked")
Map<String, Object> attributes = (Map<String, Object>) input
.getValueByField(ATTRIBUTES_FIELD);
Document mongoDoc= new Document();
List<String> listValuesFromMap = new ArrayList<String>();
for (Map.Entry<String, Object> entry : attributes.entrySet()) {
if (entry.getKey().contains("names")) {
JSONArray jsonArray = new JSONArray();
listValuesFromMap.add((String) entry.getValue().toString());
for (String item : listValuesFromMap) {
jsonArray.add(item.toString());
}
mongoDoc.put(entry.getKey(), jsonArray);
}
else {
listValuesFromMap.add((String) entry.getValue().toString());
mongoDoc.put(entry.getKey(), entry.getValue());
}
}
我认为问题出在listValuesFromMap.add((String) entry.getValue().toString());
行中 - 来自entry.getValue()
的值已经在[]和add
方法中放置了额外的[]。有谁知道如何避免这些额外的括号?
答案 0 :(得分:1)
我仍然不确定我是否足够回答。我会试试。
据我了解,双括号来自于ArrayList
中的ArrayList
。这对于许多目的来说都很好。但是,要避免使用双括号,您需要将ArrayList
放入ArrayList
,或者在打印之前将其取出(或者您需要使用它)。对于第一个选项,以下是如何将ArrayList
的元素单独添加到listValuesFromMap
而不是仅添加列表:
for (Map.Entry<String, Object> entry : attributes.entrySet()) {
Object value = entry.getValue();
if (entry.getKey().contains("names")) {
JSONArray jsonArray = new JSONArray();
for (Object name : (ArrayList<?>) value) {
listValuesFromMap.add(name.toString());
}
for (String item : listValuesFromMap) {
jsonArray.add(item);
}
mongoDoc.put(entry.getKey(), jsonArray);
} else {
listValuesFromMap.add(value.toString());
mongoDoc.put(entry.getKey(), entry.getValue());
}
}
您也可以考虑直接从jsonArray
而不是value
将这些项目放入listValuesForMap
;但是,这不包括在外部for
循环的先前迭代中添加到列表中的值,因此它可能不是您想要的。
对于第二个选项,listValuesFromMap.get(0)
将返回列表的第一个元素,即您放在其中的ArrayList
。但是,我认为这不是你需要的。