List中的映射 - 如何使用Stream进行迭代

时间:2018-03-26 06:05:51

标签: java java-stream

如何迭代

List<Map<String, String>> 

使用streams..i尝试了没有流,我能够迭代。

for (Map<String, String> temp1 : maps){
                    for(Map.Entry<String, String> temp2: temp1.entrySet())

有没有办法使用Streams迭代..

4 个答案:

答案 0 :(得分:2)

您可以使用Stream.flatMap(...)从地图列表中迭代每个地图条目。

List<Map<String, String>> maps = ...
maps.stream()
    .flatMap(map -> map.entrySet().stream())
    .forEach(entry -> System.out.println(entry));

来自文档:

  

返回一个流,该流包含将此流的每个元素替换为通过将提供的映射函数应用于每个元素而生成的映射流的内容的结果。

答案 1 :(得分:1)

如果你想使用流,你可以迭代值,keySet,entrySet:取决于你想要实现的目标。您需要指定您需要的确切内容。

下面的一些代码示例:

List<HashMap<String, String>> lm = new ArrayList<HashMap<String, String>>();

HashMap<String, String> m1 = new HashMap<String, String>();
HashMap<String, String> m2 = new HashMap<String, String>();

m1.put("k1", "v1-m1");
m1.put("k2", "v2-m1");
m1.put("k3", "v3-m1");

m2.put("k1", "v1-m2");
m2.put("k3", "v1-m2");
m2.put("k3", "v1-m2");

lm.add(m1);
lm.add(m2);


lm.stream().forEach(e-> e.values().stream().forEach(ex-> System.out.println(ex)));

/给出输出:

v1-m1 
v2-m1 
v3-m1 
v1-m2 
v1-m2

答案 2 :(得分:1)

    List<Map<String,String>> maps = new LinkedList<Map<String,String>>();
            Map<String, String> map1 = new HashMap<String, String>();
            map1.put("key1", "value1");
            maps.add(map1);
            maps.stream().forEach(map -> 
map.forEach((k,v)->System.out.println("key:"+k+" value:"+v)));

答案 3 :(得分:1)

如果您只需要迭代,则根本不需要流。流可用于对元素执行转换,过滤它们或对它们执行一些减少。

要仅迭代,请在列表及其地图元素中使用forEach

maps.forEach(map -> map.forEach((key, value) -> /* use key and value here */));