使用流编写程序 - 获取出现次数不等于其值的元素

问题描述 投票:0回答:1

例如:

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()));
}
java java-8 java-stream
1个回答
2
投票

如果我理解你的问题,你需要像这样使用

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();
  1. 计数出现次数:计算每个数字在列表(单词)中出现的次数。
  2. 按计数过滤:仅保留出现次数与其值相同的数字。
© www.soinside.com 2019 - 2024. All rights reserved.