java – 使用Collections.frequency()打印某些值

前端之家收集整理的这篇文章主要介绍了java – 使用Collections.frequency()打印某些值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个数组如下:
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

猜你在找的Java相关文章