Java 8 - Streams API - 在 LIST 上操作

标签 java java-8 java-stream

我有一个 ArrayList,其中包含以下内容 - CHENNAI、MUMBAI、DELHI、CHENNAI、DELHI、CHENNAI。另外,假设这 3 个城市名称被定义为一个 ENUM,每个城市都有一个值。 (金奈=1、孟买=2 和德里=3)

我的 Java 8 Streams,我能够计算城市值的总和,在本例中为 1+2+3+1+3+1 = 11。

我的问题是,如果有一个附加条件,我如何计算同一个 ArrayList 的城市值的总和,

如果城市名称出现两次,则只能添加一次。即在本例中,CHENNAI 出现了 3 次。因此,在添加其值时,我们应该仅考虑 1(对于前 2 次出现)+ 1 = 2,而不是 3。类似地,DELHI 出现了 2 次。因此,德里的值应该只取一次。 因此,最终结果将是 2+2+3 = 7,而不是我之前解释的 11。

请帮助如何在 Java 8 中实现这一点

最佳答案

映射到您的枚举并使用 .distinct() 在计算总和之前过滤掉重复项。

根据您如何将 enum 映射到 int,您可以尝试:

List<String> cities = ...
int sum = cities.stream()
    .map(CityEnum::valueOf)
    .distinct()
    .mapToInt(CityEnum::ordinal)
    .sum();

关于Java 8 - Streams API - 在 LIST 上操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49246277/

相关文章:

java - Java 8 中处理 "unsigned"整数的想法

JavaFX ColorPicker NullPointerException

java - 如何从流中收集仅包含相同 X 类型对象的某些字段的 X 类型对象,而不使用辅助集合

java - 更新到 BouncycaSTLe 版本 1.56 后出现证书问题

java - 3d 数组出了问题

java - 使用 Java ArrayList 在 Scala 中初始化 Java 列表

Java 8 流 API :How to handle null value in Map

Java:计算文本文件/字符串中的空行数

java - 如何从 java 将 Java 类型添加到 nashorn 引擎全局作用域?

Java 流 API 父子关系