java - 一种使用循环计算数组中唯一元素的方法(Java)
问题描述
我正在尝试制作一种计算数组中唯一元素数量的方法。例如,如果数组包含 [1,2,3,4,5,1,5],则有 3 个唯一元素,我的方法应返回数字 3。
这是我到目前为止所得到的:
static int numberOfUniqueIntegers(int[] number, int len) {
int unique = 0;
for (int i = 0; i < len; i++){
int j;
for (j = 0; j < i; j ++) {
if (number[i] == number[j]) {
break;
}
}
if (i == j);
unique++;
}
return unique;
}
该方法接受数组编号和一个整数len(这是数组的长度)。
但在这种情况下: [1,2,3,4,5,1,5] 我的方法将返回 5,而不是 3。我不知何故需要检查该数字之前是否重复过,如果不是unique++。
解决方案
您可以创建一个频率Map
,然后获取仅出现一次的键的数量。
static int numberOfUniqueIntegers(int[] number) {
Map<Integer, Long> freq = Arrays.stream(number).boxed().collect(
Collectors.groupingBy(x -> x, Collectors.counting()));
return (int) freq.entrySet().stream().filter(e -> e.getValue().equals(1L))
.map(Map.Entry::getKey).count();
}
推荐阅读
- android - 如何使用 Retrofit 和 Gson 解析 Android 中的嵌套 JSON 数据
- c# - How to change the editable ComboBox's text to something else when a specific ComboBoxItem is selected?
- windows - Ansible - Windows 路径变量
- css - 如何缩放多个图像以填充区域
- angular - 通过 BehaviorSubject 共享数据并绑定到结果,不确定这是否可以?
- c# - 如何为 Azure App Service 上的每个请求设置自定义标头?
- mysql - 替换 mysql 表中的字符以导出到 JSON 文件
- php - Ajax 检查唯一的电子邮件地址
- r - 根据注册值编辑 y 轴
- java - 如何获得媒体播放器持续时间的正确持续时间格式?