首页 > 解决方案 > 使用 JAVA 8 遍历附加到 ArrayList 的 MAP 条目元素

问题描述

如何迭代附加到 ArrayList 的 MAP 条目的值。(List<Map<Set, Map.Entry<String, Object>>>) 我是 java 8 的新手,我想通过使用 lambda 表达式获取该 MAP 条目的值。我想避免早于版本 8 的 java 使用此语句。

    List<Object> listeDesValeurs = new ArrayList<Object>();
    for (int i = 0; i < listExtractQglobal.size(); i++) {
        for (Entry<String, Object> entry : listExtractQglobal.get(i)
                .entrySet()) {
listeDesValeurs.add(entry.getValue());
        }
    }

真的非常感谢!

标签: lambdajava-8

解决方案


如果你想用 Java 8 风格(使用 lambda 表达式和方法引用)编写上面的代码,你可以这样写:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;

public class Main {

    public static void main(String[] args) {
        List<Map<String, Object>> myMapsList = new ArrayList<>(); // My list, consisting of maps
        Map<String, Object> someSampleMap = new HashMap<String, Object>();
        someSampleMap.put("bla", new Object());
        myMapsList.add(someSampleMap);
        List<Object> resultsList = new ArrayList<Object>(); // The list that I want to put all my mal values into
        resultsList = myMapsList.stream().flatMap(myMap -> myMap.entrySet().stream()).map(Entry::getValue).collect(Collectors.toList());
        System.out.println(resultsList.size()); // should print out 1, since the arraylist myMapsList only has one map which in turn has only one entry
    }
}

推荐阅读