【发布时间】:2018-02-20 08:45:43
【问题描述】:
我正在尝试删除 java 8 中的重复数字,包括引用数。例如,我有一个数组,其值类似于 (2,3,2,5)
所有数字 2 都应该被删除,而数字应该是 3 和 5。 所以预期的总和是 8。但是在我下面的代码中,它仍然得到 2。它确实删除了重复的数字,但仍然保留了数字参考。
这是我的代码。
List<Integer> clearedNumbers = numbers.stream().distinct().collect(Collectors.toList());
int sum = clearedNumbers.stream().mapToInt(Integer::intValue).sum();
我得到的总和是 10 而不是 8。
【问题讨论】:
-
您需要创建一个频率直方图,然后将频率为 1 的直方图相加
-
使用
Set,第一行更容易阅读。 -
您得到的总和是正确的,因为它删除了重复项并执行了求和运算,您想要的是删除频率大于一的所有数字并执行求和运算。
-
distinct显然会保持 one 2