2012-06-07 181 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

感謝這個鏈接真的很有幫助。 –