当前位置: 首页 > 知识库问答 >
问题:

Java8流:迭代映射中的列表

秦权
2023-03-14

我在迭代一个对象内的列表时遇到了一个问题,该对象内嵌在另一个映射中。我的目标是迭代这个列表并生成一个映射 ,我希望使用streams和lamdas来实现这一点。

public class ModelBO {
    private String id;
    private String name;
    private String version;
    private Map<String, FolderBO> folderValues = null; 
}

public class FolderBO {
    private String id;
    private String name;
    private String type;
    private Map<String, String> properties;
    private List<ElementBO> elements = new ArrayList<ElementBO>();
}

public class ElementBO {
    private String id;
    private String name;
    private String type;
}

我在上面看到了,我需要通过迭代FolderBo中的elementList从elementBo创建一个带有map 的映射。folderBo本身就在Modelbo的地图内。

  Map<String,String> elementMap = 
    UniModelBO.getInstance().getFolderValues().entrySet().stream()
       .filter(entrySet -> entrySet.getKey()!="relations")
       .map(entrySet -> entrySet.getValue().getElements()::stream)
       .collect(Collectors.toMap(ElementBO::getName, ElementBO::getId));

共有1个答案

蒋英博
2023-03-14

您就快到了,只需使用FlatMap将嵌套的List流转换为单个流即可。我还建议使用equals方法进行字符串比较:

Map<String, String> elementMap =
        UniModelBO.getInstance().getFolderValues().entrySet().stream()
                .filter(entrySet -> !entrySet.getKey().equals("relations"))
                .flatMap(entrySet -> entrySet.getValue().getElements().stream())
                .collect(Collectors.toMap(ElementBO::getName, ElementBO::getId));
                           
 类似资料:
  • 我有两份清单: 列表1: Object1(name1, id1) 列表2: Object2(name2, id2) 给定list1的大小与list2相同 我想迭代list2,如果list2的name2不为null,则更新list1的name1。 以下是使用旧java的代码: 用java实现这一点的最佳方法是什么。util。流动

  • 我有一个映射,它包含日期作为键和(另一个字符串作为键和列表作为值的映射)作为值。,我想填充另一个将String作为键和double作为值的映射。FlexiServer的内容包括 因此,基本上,我想首先迭代外部映射以获得内部映射,然后迭代内部映射以获得FlexiServers列表,并填充新的映射,其中服务器号作为键,数量列表作为值。我如何使用Java8流来实现这一点呢? 我尝试使用for循环,但我希

  • 我正在从文件中读取值并获取列表。如下- 一旦我得到这个

  • 我想知道,如何在Java8中使用流API迭代多级列表 根据Java8,我应该做如下的操作 我想要流利地做这件事(使用内部迭代)。任何解释都会很感激。

  • 我有一个实体,看起来像这样: 输入数据是一个

  • 我有我创建的地图的地图 我尝试在第二个映射中迭代键的值。 所以它可以是这样的: key1->keya->value1 -------->键->值2 -------->键->值4 -------->KeyC->value1 我想继续多久就继续多久。 因此,我有,并尝试使用名为的值变量和增量计数器if来循环中的所有值 我不知道如何获得。我试着这样做 但这给了我信笺。 如果我执行,它会给出我想要的正确值