java – 使用Collections.frequency()打印某些值
发布时间:2020-05-24 18:57:46 所属栏目:Java 来源:互联网
导读:我有一个数组如下: int[] array = {11, 14, 17, 11, 48, 33, 29, 11, 17, 22, 11, 48, 18}; 我想要做的是找到重复的值,并打印它们. 所以我这样做的方法是转换为ArrayList,然后设置并使用Set上的流. ArrayListInteger list = new ArrayList(array.length);for
|
我有一个数组如下: int[] array = {11,14,17,11,48,33,29,22,18};
我想要做的是找到重复的值,并打印它们. 所以我这样做的方法是转换为ArrayList,然后设置并使用Set上的流. ArrayList<Integer> list = new ArrayList<>(array.length);
for (int i = 0; i < array.length; i++) {
list.add(array[i]);
}
Set<Integer> dup = new HashSet<>(list);
然后我使用流循环它并使用Collections.frequency打印值. dup.stream().forEach((key) -> {
System.out.println(key + ": " + Collections.frequency(list,key));
});
当然,即使计数为1,它们也会打印出来. 我想添加if(key> 1)但它是我想要的值而不是键. 如何在此实例中获取值,仅在值>处打印2. 我可以投入: int check = Collections.frequency(list,key);
if (check > 1) {
但是这会在流中复制Collections.frequency(list,key)并且非常难看. 解决方法可能你可以使用过滤器只获得大于2的值:dup.stream()
.filter(t -> Collections.frequency(list,t) > 2)
.forEach(key -> System.out.println(key + ": " + Collections.frequency(list,key)));
结果你的情况是: 11: 4 编辑 另一种方案: 无需使用Set或Collections.frequency即可使用: Integer[] array = {11,18};
Arrays.stream(array).collect(Collectors.groupingBy(p -> p,Collectors.counting()))
.entrySet().stream().filter(t -> t.getValue() > 1)
.forEach(key -> System.out.println(key.getKey() + ": " + key.getValue()));
产量 48: 2 17: 2 11: 4 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
