Saya perlu mengubah a HashMap<String, Object>
menjadi array; Adakah yang bisa menunjukkan kepada saya bagaimana ini dilakukan?
Saya perlu mengubah a HashMap<String, Object>
menjadi array; Adakah yang bisa menunjukkan kepada saya bagaimana ini dilakukan?
Jawaban:
hashMap.keySet().toArray(); // returns an array of keys
hashMap.values().toArray(); // returns an array of values
Perlu dicatat bahwa urutan kedua larik mungkin tidak sama, Lihat jawaban oxbow_lakes untuk pendekatan iterasi yang lebih baik ketika pasangan kunci / nilai diperlukan.
Set
dan nilainya menjadi a Collection
. Sementara mereka secara teknis diubah menjadi array (dan menjawab pertanyaan Anda), konsep key-value pair telah hilang - itulah mengapa ini adalah jawaban yang sangat menyesatkan (dan berbahaya) ....
Jika Anda menginginkan kunci dan nilai, Anda selalu dapat melakukan ini melalui entrySet
:
hashMap.entrySet().toArray(); // returns a Map.Entry<K,V>[]
Dari setiap entri, Anda (tentu saja) bisa mendapatkan kunci dan nilai melalui metode getKey
dangetValue
{key, value}[]
kebalikan darikey[], value[]
Jika Anda memiliki HashMap<String, SomeObject> hashMap
:
hashMap.values().toArray();
Akan mengembalikan Object[]
. Jika sebaliknya Anda menginginkan sebuah array dari tipe tersebut SomeObject
, Anda dapat menggunakan:
hashMap.values().toArray(new SomeObject[0]);
values()
bukan keySet()
untuk sebuah array SomeObject
.
Untuk menjamin urutan yang benar untuk setiap larik Kunci dan Nilai, gunakan ini (jawaban lain menggunakan jawaban individu Set
yang tidak menawarkan jaminan untuk memesan.
Map<String, Object> map = new HashMap<String, Object>();
String[] keys = new String[map.size()];
Object[] values = new Object[map.size()];
int index = 0;
for (Map.Entry<String, Object> mapEntry : map.entrySet()) {
keys[index] = mapEntry.getKey();
values[index] = mapEntry.getValue();
index++;
}
Saya menggunakan hampir sama dengan @kmccoy, tetapi alih-alih a keySet()
saya melakukan ini
hashMap.values().toArray(new MyObject[0]);
Map<String, String> map = new HashMap<String, String>();
map.put("key1", "value1");
map.put("key2", "value2");
Object[][] twoDarray = new Object[map.size()][2];
Object[] keys = map.keySet().toArray();
Object[] values = map.values().toArray();
for (int row = 0; row < twoDarray.length; row++) {
twoDarray[row][0] = keys[row];
twoDarray[row][1] = values[row];
}
// Print out the new 2D array
for (int i = 0; i < twoDarray.length; i++) {
for (int j = 0; j < twoDarray[i].length; j++) {
System.out.println(twoDarray[i][j]);
}
}
Untuk Masuk dalam Array Satu Dimensi.
String[] arr1 = new String[hashmap.size()];
String[] arr2 = new String[hashmap.size()];
Set entries = hashmap.entrySet();
Iterator entriesIterator = entries.iterator();
int i = 0;
while(entriesIterator.hasNext()){
Map.Entry mapping = (Map.Entry) entriesIterator.next();
arr1[i] = mapping.getKey().toString();
arr2[i] = mapping.getValue().toString();
i++;
}
Untuk Masuk dalam dua Dimensi Array.
String[][] arr = new String[hashmap.size()][2];
Set entries = hashmap.entrySet();
Iterator entriesIterator = entries.iterator();
int i = 0;
while(entriesIterator.hasNext()){
Map.Entry mapping = (Map.Entry) entriesIterator.next();
arr[i][0] = mapping.getKey().toString();
arr[i][1] = mapping.getValue().toString();
i++;
}
Jika Anda menggunakan Java 8+ dan membutuhkan 2 dimensi Array
, mungkin untuk penyedia data TestNG, Anda dapat mencoba:
map.entrySet()
.stream()
.map(e -> new Object[]{e.getKey(), e.getValue()})
.toArray(Object[][]::new);
Jika Object
s Anda s String
dan Anda membutuhkan String[][]
, coba:
map.entrySet()
.stream()
.map(e -> new String[]{e.getKey(), e.getValue().toString()})
.toArray(String[][]::new);
Anda bisa mencobanya juga.
public static String[][] getArrayFromHash(Hashtable<String,String> data){
String[][] str = null;
{
Object[] keys = data.keySet().toArray();
Object[] values = data.values().toArray();
str = new String[keys.length][values.length];
for(int i=0;i<keys.length;i++) {
str[0][i] = (String)keys[i];
str[1][i] = (String)values[i];
}
}
return str;
}
Di sini saya menggunakan String sebagai tipe pengembalian. Anda dapat mengubahnya menjadi jenis pengembalian yang diminta oleh Anda.
HashMap()
tetapi solusi Anda adalah tentang Hashtable()
... Ada beberapa perbedaan di antara mereka
@SuppressWarnings("unchecked")
public static <E,T> E[] hashMapKeysToArray(HashMap<E,T> map)
{
int s;
if(map == null || (s = map.size())<1)
return null;
E[] temp;
E typeHelper;
try
{
Iterator<Entry<E, T>> iterator = map.entrySet().iterator();
Entry<E, T> iK = iterator.next();
typeHelper = iK.getKey();
Object o = Array.newInstance(typeHelper.getClass(), s);
temp = (E[]) o;
int index = 0;
for (Map.Entry<E,T> mapEntry : map.entrySet())
{
temp[index++] = mapEntry.getKey();
}
}
catch (Exception e)
{
return null;
}
return temp;
}
//--------------------------------------------------------
@SuppressWarnings("unchecked")
public static <E,T> T[] hashMapValuesToArray(HashMap<E,T> map)
{
int s;
if(map == null || (s = map.size())<1)
return null;
T[] temp;
T typeHelper;
try
{
Iterator<Entry<E, T>> iterator = map.entrySet().iterator();
Entry<E, T> iK = iterator.next();
typeHelper = iK.getValue();
Object o = Array.newInstance(typeHelper.getClass(), s);
temp = (T[]) o;
int index = 0;
for (Map.Entry<E,T> mapEntry : map.entrySet())
{
temp[index++] = mapEntry.getValue();
}
}
catch (Exception e)
{return null;}
return temp;
}
HashMap<String, String> hashMap = new HashMap<>();
String[] stringValues= new String[hashMap.values().size()];
hashMap.values().toArray(stringValues);