سؤال

ما هي أفضل طريقة لتحويل أ Map<key,value> إلى أ List<value>؟ما عليك سوى التكرار على جميع القيم وإدراجها في القائمة أم أنني أتجاهل شيئًا ما؟

هل كانت مفيدة؟

المحلول

List<Value> list = new ArrayList<Value>(map.values());

وعلى افتراض:

Map<Key,Value> map;

نصائح أخرى

القضية هنا هي أن Map له قيمتان (مفتاح وقيمة)، بينما a List له قيمة واحدة فقط (عنصر).

ولذلك، فإن أفضل ما يمكن القيام به هو إما الحصول على List من المفاتيح أو القيم.(ما لم نقم بإنشاء غلاف للاحتفاظ بزوج المفتاح/القيمة).

قل لدينا أ Map:

Map<String, String> m = new HashMap<String, String>();
m.put("Hello", "World");
m.put("Apple", "3.14");
m.put("Another", "Element");

المفاتيح ك List يمكن الحصول عليها عن طريق إنشاء جديد ArrayList من Set عاد بواسطة Map.keySet طريقة:

List<String> list = new ArrayList<String>(m.keySet());

في حين أن القيم ك List يمكن الحصول عليها إنشاء جديد ArrayList من Collection عاد بواسطة Map.values طريقة:

List<String> list = new ArrayList<String>(m.values());

نتيجة الحصول على List من المفاتيح:

Apple
Another
Hello

نتيجة الحصول على List من القيم:

3.14
Element
World

واستخدام API جافا 8 تيارات.

List<Value> values = map.values().stream().collect(Collectors.toList());

وmap.entrySet() يمنحك مجموعة من الكائنات Map.Entry تحتوي على كل مفتاح وقيمة. يمكنك ثم تحويل هذا إلى أي كائن مجموعة تريد، مثل new ArrayList(map.entrySet())؛

قائمة ماذا ؟

على افتراض map هو المثال الخاص بك من Map

  • map.values() سيعود أ Collection يحتوي على كافة قيم الخريطة.
  • map.keySet() سيعود أ Set تحتوي على كافة مفاتيح الخريطة.

واعتقد انك تريد تحويل القيم الواردة في Map إلى list؟ الأسهل هو استدعاء الأسلوب values() واجهة Map. هذا سيعود Collection من الأشياء القيمة الموجودة في Map.

لاحظ أن هذا Collection المدعوم من قبل الكائن Map وسوف أية تغييرات على الكائن Map تعكس هنا. حتى إذا كنت تريد نسخة منفصلة لا بد أن الكائن Map الخاص بك، ببساطة إنشاء كائن جديد List مثل ArrayList تمرير Collection القيمة على النحو التالي.

ArrayList<String> list = new ArrayList<String>(map.values());

ويمكنك القيام بذلك مثل هذا

List<Value> list = new ArrayList<Value>(map.values());

إذا كنت تريد التأكد من القيم في List<Value> الناتجة هي في يأمر الرئيسي للMap<Key, Value> المدخلات، وتحتاج إلى "المرور عبر" SortedMap بطريقة أو بأخرى.

وإما <م> بدء مع تنفيذ SortedMap ملموسة (مثل TreeMap) أو إدراج Map الإدخال إلى SortedMap قبل تحويل ذلك إلى List. منها مثلا:

Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));

وإلا ستحصل على كل ما أصلي طلب تقدم تنفيذ Map، التي غالبا ما تكون شيئا آخر غير طلب رئيسي الطبيعي (حاول Hashtable أو ConcurrentHashMap، لمجموعة متنوعة).

    Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("java", 20);
    map.put("C++", 45);

    Set <Entry<String, Integer>> set = map.entrySet();

    List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);

ونحن يمكن أن يكون كل زوج من المفاتيح وقيمة في list.Also يمكن الحصول على المفتاح والقيمة باستخدام Map.Entry بواسطة بالتكرار عبر القائمة.

// you can use this
List<Value> list = new ArrayList<Value>(map.values());

// or you may use 
List<Value> list = new ArrayList<Value>();
for (Map.Entry<String, String> entry : map.entrySet())
{
list.add(entry.getValue());    
}
"Map<String , String > map = new HapshMap<String , String>;
 map.add("one","java");
 map.add("two" ,"spring");
 Set<Entry<String,String>> set =  map.entrySet();
 List<Entry<String , String>> list = new ArrayList<Entry<String , String>>    (set);
 for(Entry<String , String> entry : list ) {
   System.out.println(entry.getKey());
   System.out.println(entry.getValue());
 } "

إليك طريقة عامة للحصول على القيم من الخارطة.

public static <T> List<T> ValueListFromMap(HashMap<String, T> map) {
    List<T> thingList = new ArrayList<>();

    for (Map.Entry<String, T> entry : map.entrySet()) {
        thingList.add(entry.getValue());
    }

    return thingList;
}
HashMap<Integer, List<String>> map = new HashMap<>(); 
List<String> list = new ArrayList<String>();
list.add("Java");
list.add("Primefaces");
list.add("JSF");
map.put(1,list);
if(map != null){
    return new ArrayList<String>((Collection<? extends String>) map.values());
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top