我有一个包含以下内容的ArrayList-CHENNAI,MUMBAI,DELHI,CHENNAI,DELHI,CHENNAI。另外,假设将这3个城市名称定义为ENUM,并针对每个城市指定一个值。 (CHENNAI = 1,MUMBAI = 2和DELHI = 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();