我在迭代嵌入另一个 map 中的对象内的列表时遇到问题。
我的目标是迭代这个列表并生成一个 map
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
我编写了以下代码。
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));
UniModelBO 是为 ModelBo 创建单例对象的实用程序类。
最佳答案
您已经差不多完成了,只需使用 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));
关于java-stream - Java 8 流 : Iterate Over a List Inside a Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64984974/