如何添加到存储在BeanMap中的列表中?

时间:2019-06-11 12:56:46

标签: java

我有一个表示一个对象的BeanMap,该对象的一个​​字段是一个List,我希望能够添加到该对象。在此刻,代码将简单地获取一个现有列表并将完整列表放入BeanMap中。但是,如果以后我想将项目添加到列表中,则它们将覆盖那里的项目,因为新列表正被放入BeanMap中。

到目前为止,我已经尝试过从BeanMap获取List,但是它不允许我使用beanMap.get方法并为该返回结果分配新的字符串。不过,您可以为对象这样做。

我也尝试将其作为as对象并使用Arrays.asList()对其进行操作。但这也不起作用。

我目前尝试的操作:

Object listObject = myBeanMap.get("theList");
Arrays.asList(listObject).add("SOME STRING");
myBeanMap.put("theList", listObject);

我正在寻找一种在保留现有项目的同时将项目添加到该列表的方法。

1 个答案:

答案 0 :(得分:2)

Arrays.asList(listObject).add("SOME STRING");

Arrays.asList创建一个新列表,向其中添加一些内容,但是您从未保存该列表,因此无法添加新内容。您需要将代码更改为此:

List<Object> list = Arrays.asList(listObject, "SOME STRING");
myBeanMap.put("theList", list);

您不能使用add()方法,因为Arrays.asList()返回的列表实现不支持add(),并且会出现运行时异常。这就是为什么您必须将所需的新项目作为Arrays.asList()调用的参数的原因。

修改1: 如果listObject已经是列表实例,例如一串字符串,您可以先进行投射再添加一个:

List<String> list = (List<String>) myBeanMap.get("theList");
list.add("another string");
myBeanMap.put("theList", list);

修改2: 如果要保留原始列表,则需要复制旧列表:

List<String> original = (List<String>) myBeanMap.get("theList");
List<String> extended = new ArrayList<>(original);
extended.add("new string"); // "new string" is NOT added to the original list
myBeanMap.put("theExtendedList", extended);