2012-06-07 180 views
3

我有此ArrayList在Java中 -如何将数组转换为数组?

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) 

如果无法创建地图的对象数组为什么春天使用它吗?那么我们应该如何使用这种方法呢?

+0

http://stackoverflow.com/questions/10925648/how-to-convert-arraylist-containing-complex-type-to-an-array –

+0

@JigarJoshi那是我自己的问题,在我得到回答。 –

+0

您在上一个问题的评论中有正确的答案:没有参数化类型的阵列 –

回答

2

试试这个,

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

这是要走的路...但是,通过这样做你仍然会失去类型安全性......我认为使用新的Map [list.size()]会更合适,这种方式可以将任何Map添加到列表中将会很好。 –

1

你可以尝试这样的:

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

这不会工作会给类抛出异常 – mprabhat

-2

你不能做到这一点。

List.toArray(T [] a)是您唯一的选择,但它不适用于参数化类型 ,因为它们在运行时不会保留。

+0

春天呢? –

+0

怎么样? Spring有这样的例子吗? – MTilsted

+0

int [] org.springframework。jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(String sql,Map [] batchValues) –

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中[] =地图list.toArray(新的HashMap [0]);

3

简而言之,您不能制作具体参数化类型的数组。 This是一个很好的解释发生了什么事情。 Spring类型与Map batchValues基本相同。参数类型仅用于文档。 Java类型系统中的这个漏洞是对性能的折衷。

+0

感谢这个链接真的很有帮助。 –