Java 8 - Streams API - 在LIST上运行

jos*_*thi 2 java java-8 java-stream

我有一个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中实现这一点

Kar*_*cki 7

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

根据您的映射方式enum,int您可以尝试:

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