gpt4 book ai didi

Java 8 流和 lambda

转载 作者:行者123 更新时间:2023-11-30 08:11:28 26 4
gpt4 key购买 nike

我有一段非常有趣的代码,我想重构它以使用 java 8 流 API 功能

Map<String, Object> user = ...// pull user from somewhere
List<Map<String, Object>> attributes = ...// pull attributes from somewhere
List<Map<String, Object>> processedAttributes = new ArrayList<>();
for (Map<String, Object> attribute : attributes) {
if (!((List<Map<String, Object>>) attribute.get("subAttributes")).isEmpty()) {
for (Map<String, Object> subAttribute : (List<Map<String, Object>>) attribute.get("subAttributes")) {
if (!user.containsKey(subAttribute.get("name"))
&& Boolean.TRUE.equals(subAttribute.get("required"))) {
processedAttributes.add(subAttribute);
}
}
}
}

如何使用 Java 8 流对其进行重构?

最佳答案

这可以使用 flatMap 以非常简单的方式重写:

List<Map<String, Object>> processedAttributes = attributes.stream()
.flatMap(
attribute -> ((List<Map<String, Object>>) attribute
.get("subAttributes")).stream())
.filter(subAttr -> !user.containsKey(subAttr.get("name"))
&& Boolean.TRUE.equals(subAttr.get("required")))
.collect(Collectors.toList());

请注意,isEmpty 检查在您的代码中是不必要的:如果 List 为空,则无论如何都不会执行 for 循环。

关于Java 8 流和 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31006684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com