【问题标题】:Java - Displaying key in map with most occurrences - Java [duplicate]Java - 在地图中显示出现次数最多的键 - Java [重复]
【发布时间】:2022-01-04 20:19:21
【问题描述】:

我有一个字符串,我创建了一个显示字符出现的地图:

String: "aaa bbbb ccccccccccc ddddd eeee"
map: {a=3, b=4, c=11, d=5, e=4}

我只想显示c,也输出:

c

(因为它经常发生)。

【问题讨论】:

标签: java dictionary


【解决方案1】:

您可以使用这样的流找到最大键:

Character maxKey = map.entrySet().stream()
    .max(Map.Entry.comparingByValue())
    .get().getKey();

【讨论】:

  • 比较器可能是Map.Entry.comparingByValue()
【解决方案2】:

有很多方法。以下是我的做法。

假设你的键是字符串。

  • 流式传输条目集。
  • 使用 Entry 比较器获取最大值。
  • 获取可选的Entry,然后获取字符串。
Map<String, Integer> maps = Map.of("c", 11, "d", 17, "f", 12);
String key = maps.entrySet().stream()
        .max(Entry.comparingByValue())
        .get().getKey();
System.out.println(key);

打印

d

您也可以将这两种操作结合​​起来,使用chars().stream()方法。

  • 串流字符
  • 映射到 Character 对象。
  • 按字符分组统计字符数
  • 像以前一样流式传输条目集
  • 并返回字符。
String str = "aaa bbbb ccccccccccc ddddd eeee";
char key = str.chars()
        .mapToObj(ch -> Character.valueOf((char) ch))
        .collect(Collectors.groupingBy(s -> s,
                Collectors.counting()))
        .entrySet().stream().max(Entry.comparingByValue())
        .get().getKey();

System.out.println(key);

在这种情况下,打印

c

如果您只想计算字母,可以使用 Character.isLetter() 过滤

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-04
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 2016-09-14
    • 2020-12-07
    相关资源
    最近更新 更多