我有一个 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/