如何将ArrayList转换为数组?

4

我有一个Java中的ArrayList -

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

为了将其转换为数组,我调用list.toArray()方法,但它返回的是Object[]。这不是我想要的。我需要Map<String,Object>[]
我知道有List.toArray(T[] a),但它无法使用参数化类型。
Spring框架中batchUpdate方法的方法签名如下 -
int[] org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(String sql, Map<String, ?>[] batchValues)

如果不能创建Map对象的数组,为什么Spring还在使用它?那我们应该如何使用这个方法呢?

@JigarJoshi 这是我的问题,但在我得到答案之前就被关闭了。 - Kshitiz Sharma
你之前的问题评论中有正确的答案:没有参数化类型的数组。 - Adrian Shum
我相信这与Spring没有任何关系吧? - Adrian Shum
@AdrianShum,与Spring有关的是,Spring开发人员使用了带有参数类型的数组,而你说这是不可能的。但我错了,也许他们有Chuck Norris在为他们工作。 - Kshitiz Sharma
可能是使用泛型映射数组的问题的重复。 - KV Prajapati
显示剩余3条评论
6个回答

3
简而言之,您无法创建具体参数化类型的数组。 这里一个相当好的解释。 Spring 类型本质上与 Map batchValues 相同。 参数类型仅用于文档。 Java 类型系统中的这个缺陷是性能的一种折衷。

2

试试这个:

 Map<String,Object>[] ar=list.toArray(new HashMap[list.size()]);

这是正确的方法...但是这样做仍然会失去类型安全性...我认为更合适的方法是使用new Map [list.size()],这样添加到列表中的任何Map都将正常工作。 - Alex Calugarescu

1

你可以试试这样做:

Map<String, Object> [] mp = list.toArray(new HashMap[list.size()]);

1

请按照以下方式操作:

Map<String, Object> [] mp = new HashMap[list.size()]; 
list.toArray(mp); 

这个答案可行。我已经测试过了。

我的完整测试代码如下:

import java.util.*;
public class Test {

    public static void main (String [] args) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("Hello", "World");
        ArrayList<Map<String, Object>> list = new ArrayList<Map <String, Object>>();
        list.add(map);

        Map<String, Object> [] mp = new HashMap[list.size()]; 
        list.toArray(mp);   
        System.out.println(mp[0]);    // prints out {Hello=World}
    }
}

0

HashMap[] map = list.toArray(new HashMap[0]);

哈希映射数组 map = list.toArray(new HashMap[0]);


-2

你做不到。

List.toArray(T[] a) 是你唯一的选择,但它无法处理参数化类型,因为它们在运行时不会被保留。


这方面怎么样?你有Spring实现这个的例子吗? - MTilsted
int[] org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(String sql, Map<String, ?>[] batchValues) - Kshitiz Sharma
哎?那个Spring函数完全做了另一件事情。阻止原作者实现他想要的问题是,类型的通用部分在运行时不存在。因此,您无法创建相同类型的新对象。 - MTilsted

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接