对于后一个问题,您必须进行更改
.forEach((k, v) -> if(v.size() > 1) System.out.println(k+" "+v.size()));
至
.forEach((k, v) -> {if(v.size() > 1) System.out.println(k+" "+v.size());});对于第一部分,尚不清楚为什么需要第一条管道,
collect然后需要第二条
Stream管道。如果目的是将转换
IntStream为
Stream<Integer>,请使用
boxed():
Arrays.stream(arr) .boxed() .collect(Collectors.groupingBy(s -> s)) .forEach((k, v) -> System.out.println(k+" "+v.size()));
正如Dici所建议的,您还可以将Collectors链接起来,将每个数字与其出现的次数分组:
Map<Integer,Integer> occurrences = Arrays.stream(arr) .boxed() .collect(Collectors.groupingBy(s -> s, Collectors.counting()));



