Java 列表中的映射-如何使用流进行迭代

Java 列表中的映射-如何使用流进行迭代,java,java-stream,Java,Java Stream,如何迭代 List<Map<String, String>> 列表 使用流..我尝试过不使用流,并且能够进行迭代 for (Map<String, String> temp1 : maps){ for(Map.Entry<String, String> temp2: temp1.entrySet()) for(映射temp1:maps){ 对于(Map.Entry temp2:temp1.entryS

如何迭代

List<Map<String, String>> 
列表
使用流..我尝试过不使用流,并且能够进行迭代

for (Map<String, String> temp1 : maps){
                    for(Map.Entry<String, String> temp2: temp1.entrySet())
for(映射temp1:maps){
对于(Map.Entry temp2:temp1.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)));
可以使用来迭代地图列表中的每个地图条目

List<Map<String, String>> maps = ...
maps.stream()
    .flatMap(map -> map.entrySet().stream())
    .forEach(entry -> System.out.println(entry));
列表映射=。。。
maps.stream()
.flatMap(map->map.entrySet().stream())
.forEach(输入->系统输出打印项次(输入));
从文档中:

返回一个流,该流由将提供的映射函数应用于每个元素而生成的映射流的内容替换该流的每个元素的结果组成

List maps=newlinkedlist();
Map map1=新的HashMap();
map1.put(“键1”、“值1”);
添加(map1);
maps.stream().forEach(map->
map.forEach((k,v)->System.out.println(“键:+k+”值:+v));

如果您只需要迭代,则根本不需要流。流对于对元素执行转换、过滤元素或对元素执行某些缩减非常有用

要仅进行迭代,请在列表及其映射元素中使用
forEach

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

您希望输出是什么?您通常使用流来避免显式迭代。有没有任何方法可以使用流进行迭代而不使用2个for循环..我认为
flatMap
可以用于此,但是您只有一个流,因此如果您想将事物作为某种集合的列表保存,我认为您不能这样做,除非您有一些重新整理数据的方法。
map.stream().flatMap(map->map.entrySet().stream())
将返回所有
map.Entry
stream
,我个人发现
map.forEach()
比迭代
Entry
更干净。虽然这使用了流,但在本例中不需要额外的开销。
stream().forEach()可以用Collection.forEach()替换
,避免创建流。只有当目标是使用比
forEach
更高级的功能时,才需要创建流。好的一点,我没有考虑编写代码,但我使用了forEach,因为带有sysout的forEach是创建示例的最简单方法,但是
lm.forEach(e->e.values().forEach(ex->System.out.println(ex));
更简单……我会避免使用如此复杂的lambda(可以做多种不同的事情)。你可以做
lm.stream().map(Entry::values)。flatMap(Collection::stream)。forEach(System.out::println)
并很好地包装它,每行一个操作。
    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)));
maps.forEach(map -> map.forEach((key, value) -> /* use key and value here */));