例如:
A = {1,2,2,3,4,4,4,5,5,5,5,5}
输出:{1,2,5}
1 is occured 1's
2 is occured twice
3 does not occcured thrice
and so on.
我尝试创建事件的哈希图。 但不确定如何继续流并返回满足条件的值,即 {1,2,5}
List<Integer> words = Arrays.asList(1, 2, 2, 3, 4, 4, 4, 5, 5, 5, 5, 5);
System.out.println(frequencyMap(words.stream()));
public static <Integer > Map < Integer, Integer > frequencyMap(Stream < Integer > elements) {
return (Map<Integer, Integer>) elements.collect(Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.counting()));
}
如果我理解你的问题,你需要像这样使用
filter
:
List<Integer> result = words.stream()
.collect(Collectors.groupingBy(x -> x, Collectors.summingInt(x -> 1)))
.entrySet().stream()
.filter(entry -> entry.getKey().equals(entry.getValue()))
.map(Map.Entry::getKey)
.toList();