मुझे HashMap<String, Object>
एक सरणी में बदलने की आवश्यकता है; क्या कोई मुझे दिखा सकता है कि यह कैसे किया गया है?
मुझे HashMap<String, Object>
एक सरणी में बदलने की आवश्यकता है; क्या कोई मुझे दिखा सकता है कि यह कैसे किया गया है?
जवाबों:
hashMap.keySet().toArray(); // returns an array of keys
hashMap.values().toArray(); // returns an array of values
यह ध्यान दिया जाना चाहिए कि दोनों सरणियों का क्रम समान नहीं हो सकता है, जब जोड़ी कुंजी / मानों की आवश्यकता होती है, तो पुनरावृत्ति के लिए बेहतर दृष्टिकोण के लिए oxbow_lakes उत्तर देखें।
Set
और मानों में बदल देते हैं Collection
। यद्यपि वे तकनीकी रूप से सरणियों में परिवर्तित हो जाते हैं (और आपके प्रश्न का उत्तर देते हैं), कुंजी-मूल्य जोड़ी की अवधारणा खो गई है - यही कारण है कि यह एक बहुत ही भ्रामक (और खतरनाक) उत्तर है ...
यदि आप कुंजियाँ और मान चाहते हैं, तो आप हमेशा इस के माध्यम से कर सकते हैं entrySet
:
hashMap.entrySet().toArray(); // returns a Map.Entry<K,V>[]
प्रत्येक प्रविष्टि से आप (और निश्चित रूप से) और विधियों के माध्यम से कुंजी और मूल्य दोनों प्राप्त कर सकते हैंgetKey
getValue
{key, value}[]
रूप में विरोध कियाkey[], value[]
यदि आपके पास है HashMap<String, SomeObject> hashMap
:
hashMap.values().toArray();
वापस आ जाएगी Object[]
। यदि इसके बजाय आप प्रकार की एक सरणी चाहते हैं SomeObject
, तो आप उपयोग कर सकते हैं:
hashMap.values().toArray(new SomeObject[0]);
values()
बजाय keySet()
एक सरणी के लिए मतलब है SomeObject
।
कुंजी और मूल्यों के प्रत्येक सरणी के लिए सही क्रम की गारंटी देने के लिए, इसका उपयोग करें (अन्य उत्तर व्यक्तिगत Set
एस का उपयोग करते हैं जो ऑर्डर करने के लिए कोई गारंटी नहीं देते हैं।
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++;
}
CrackerJacks सुझाव का एक विकल्प, यदि आप चाहते हैं कि HashMap आदेश बनाए रखें तो आप LinkedHashMap का उपयोग करने पर विचार कर सकते हैं। जहाँ तक im के बारे में पता है कि यह कार्यक्षमता एक HashMap के समान है, लेकिन यह FIFO है इसलिए यह उस क्रम को बनाए रखता है जिसमें आइटम जोड़े गए थे।
मैंने @kmccoy के रूप में लगभग एक ही इस्तेमाल किया, लेकिन इसके बजाय keySet()
मैंने ऐसा किया
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]);
}
}
एक आयाम में पाने के लिए।
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++;
}
दो आयामों में प्राप्त करने के लिए।
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++;
}
यदि आप जावा 8+ का उपयोग कर रहे हैं और Array
शायद 2N की जरूरत है , तो शायद TestNG डेटा प्रदाताओं के लिए, आप कोशिश कर सकते हैं:
map.entrySet()
.stream()
.map(e -> new Object[]{e.getKey(), e.getValue()})
.toArray(Object[][]::new);
यदि आपके Object
s s हैं String
और आपको एक की आवश्यकता है String[][]
, तो प्रयास करें:
map.entrySet()
.stream()
.map(e -> new String[]{e.getKey(), e.getValue().toString()})
.toArray(String[][]::new);
आप यह भी कोशिश कर सकते हैं।
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;
}
यहां मैं स्ट्रिंग का उपयोग रिटर्न प्रकार के रूप में कर रहा हूं। आप इसे अपने द्वारा आवश्यक रिटर्न प्रकार में बदल सकते हैं।
@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);