我有一个数组如下:
int[] array = {11, 14, 17, 11, 48, 33, 29, 11, 17, 22, 11, 48, 18};
我想做的是找到重复的值,然后打印它们。
所以我这样做的方法是转换为 ArrayList
,然后转换为 Set
并在 Set< 上使用
.stream
/
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);
然后我使用 stream
循环遍历它并使用 Collections.frequency
打印值。
dup.stream().forEach((key) -> {
System.out.println(key + ": " + Collections.frequency(list, key));
});
这当然会全部打印出来,即使计数是一个。
我想添加 if(key > 1)
但这是我想要的值而不是键。
如何获取此实例中的值以仅在 value > 2
处打印。
我可能会输入:
int check = Collections.frequency(list, key);
if (check > 1) {
但是这会在 stream
中复制 Collections.frequency(list, key)
并且非常丑陋。
最佳答案
也许您可以使用 filter
来仅获取大于 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, 14, 17, 11, 48, 33, 29, 11, 17, 22, 11, 48, 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 - 使用 Collections.frequency() 打印某些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47353687/