আমাকে HashMap<String, Object>একটি অ্যারেতে রূপান্তর করতে হবে; কেউ কি আমাকে দেখাতে পারে যে এটি কিভাবে হয়েছে?
আমাকে HashMap<String, Object>একটি অ্যারেতে রূপান্তর করতে হবে; কেউ কি আমাকে দেখাতে পারে যে এটি কিভাবে হয়েছে?
উত্তর:
hashMap.keySet().toArray(); // returns an array of keys
hashMap.values().toArray(); // returns an array of values
এটি লক্ষ করা উচিত যে উভয় অ্যারের ক্রম একই নাও হতে পারে, জোড় কী / মানগুলির প্রয়োজন হলে পুনরাবৃত্তির জন্য আরও ভাল পদ্ধতির জন্য অক্সবো_লাক্সের উত্তর দেখুন।
Setএবং মানগুলিতে রূপান্তর করার পরে [0] মানের সাথে [0] মান অনুসারে এটির নিশ্চয়তা দেওয়া যায় না 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++;
}
ক্র্যাকারজ্যাকস পরামর্শের একটি বিকল্প, যদি আপনি হ্যাশম্যাপকে শৃঙ্খলা বজায় রাখতে চান তবে আপনি তার পরিবর্তে লিংকডহ্যাশম্যাপটি বিবেচনা করতে পারেন। যতদূর আমি অবগত রয়েছি এটির কার্যকারিতা হ্যাশম্যাপের অনুরূপ তবে এটি ফিফো তাই এটি আইটেমগুলি যুক্ত করার ক্রম বজায় রাখে।
আমি @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+ ব্যবহার করছেন এবং যদি কোনও 2 মাত্রিক প্রয়োজন হয় Array, সম্ভবত টেস্টএনজি ডেটা সরবরাহকারীদের জন্য, আপনি চেষ্টা করতে পারেন:
map.entrySet()
.stream()
.map(e -> new Object[]{e.getKey(), e.getValue()})
.toArray(Object[][]::new);
যদি আপনার Objectগুলি হয় 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);