java - 使用 Java 8 流处理嵌套集合

标签 java dictionary optimization java-8 java-stream

最近我在使用嵌套集合(List 中的 Maps 的值)时遇到了一个问题:

List<Map<String, Object>> items

在我的例子中,这个列表包含 10-20 个 map 。 在某些时候,我不得不替换值 CalculationdescriptionRating .所以我想出了这个解决方案:

items.forEach(e -> e.replace("description","Calculation","Rating"));

如果此列表中的所有 映射都包含键值对 ["description", "Calculation"],那将是一个非常好的和高效的解决方案.不幸的是,我知道在整个List<Map<String, Object>> 中只有一对这样的对。

问题是:

是否有更好(更有效)的解决方案来查找和替换这个值,而不是使用 Java-8 流遍历所有 List 元素?

完美的是在一个流中完成它,而不对其进行任何复杂/混淆操作。

最佳答案

items.stream()
     .filter(map -> map.containsKey("description"))
     .findFirst()
     .ifPresent(map -> map.replace("description", "Calculation", "Rating"));

您将不得不遍历列表,直到一个带有键 "description" 的映射被发现。拿起第一个这样的,并尝试更换。


正如@Holger 所指出的,如果键 "description"不是所有 map 都是单一的,而是一对 ("description", "Calculation")是独一无二的:

items.stream()
     .anyMatch(m -> m.replace("description", "Calculation", "Rating"));

关于java - 使用 Java 8 流处理嵌套集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52662264/

相关文章:

java - 将 JScrollPane 添加到从 JPanel 扩展的类

java - 另一个 "cannot find symbol"

mysql - 何时针对复合索引选择散列列

java - jaxb 如何在解码过程中注入(inject)值

python - 将 Excel 文件中的数据转换为 Python 字典

ios - 一次性将所有 Realm 对象转换为字典

ios - 将字典数组转换为字典并初始化模型

flash - 在 AS3 中获取对象的构造函数的最快方法是什么?

python - 在 Python 中加速双循环

java - 当我在 for 循环中使用 ArrayList 时,如何将对象添加到 ArrayList 中?