当前位置: 首页 > 知识库问答 >
问题:

利用Java8流从map中查找最高值

单于奇略
2023-03-14

我编写了以下方法来查找映射到最高值的键,并尝试转换为java。你能帮忙吗?

private List<Integer> testStreamMap(Map<Integer, Long> mapGroup) 
{
    List<Integer> listMax = new ArrayList<Integer>();
    Long frequency = 0L;
    for (Integer key : mapGroup.keySet()) {
        Long occurrence = mapGroup.get(key);
        if (occurrence > frequency) {
            listMax.clear();
            listMax.add(key);
            frequency = occurrence;
        } else if (occurrence == frequency) {
            listMax.add(key);
        }
    }
    return listMax;
}

共有1个答案

祁建业
2023-03-14

您可以通过以下途径获得一把钥匙

Integer max=mapGroup.entrySet().stream().max(Map.Entry.comparingByValue()).get().getKey();

但不幸的是,没有用于获取所有等价最大值的内置函数。

最简单、直接的解决方案是先找到最大值,然后检索映射到该值的所有键:

private List<Integer> testStreamMap(Map<Integer, Long> mapGroup) {
    if(mapGroup.isEmpty())
        return Collections.emptyList();
    long max = mapGroup.values().stream().max(Comparator.naturalOrder()).get();
    return mapGroup.entrySet().stream()
        .filter(e -> e.getValue() == max)
        .map(Map.Entry::getKey)
        .collect(Collectors.toList());
}

在“如何强制max()返回Java流中的所有最大值?”中讨论了在一次传递中获得流的所有最大值的解决方案。您将看到,如果输入的是一个普通的map(例如hashmap),那么单次传递的解决方案要复杂得多,而且不值得这样做,因为可以廉价地迭代多次。

 类似资料:
  • 问题内容: 我编写了以下方法来查找映射到最高值的键,然后尝试转换为java 。你能帮忙吗? 问题答案: 您可以通过以下方式获得一个钥匙 但不幸的是,没有内置函数可以获取所有等效的最大值。 最简单,直接的解决方案是先找到最大值,然后再检索映射到该值的所有键: “ 如何强制max()返回JavaStream中的所有最大值? ”中讨论了单次获取流的所有最大值的解决方案。”。您将看到,如果您的输入是普通的

  • 假设我有一个包含元素的列表。 使用Java8 streams,如何找到列表最小元素的索引(例如,在本例中为1)?

  • 我有一个映射,它包含日期作为键和(另一个字符串作为键和列表作为值的映射)作为值。,我想填充另一个将String作为键和double作为值的映射。FlexiServer的内容包括 因此,基本上,我想首先迭代外部映射以获得内部映射,然后迭代内部映射以获得FlexiServers列表,并填充新的映射,其中服务器号作为键,数量列表作为值。我如何使用Java8流来实现这一点呢? 我尝试使用for循环,但我希

  • 我想得到以下数据结构:Map 给定的是一个包含字段als原语(位置、目标、距离)或作为键(位置)加映射(目标)的类。从每个独特的位置,一个人可以瞄准多个目的地(按距离)。 关于第二个代码段:结果应该与第一个代码中的结果相同。唯一的区别是,LocationPair中提供的数据已被进一步处理,因此目的地和距离已被放入其目标地图中。 我知道这一定是可能的,但不知何故,我无法弄清楚如何完成它。上面的流代码

  • 我有一个嵌套的映射,其中key是员工名称,values是另一个映射,其中key是公司名称,value是经验年数,如下所示 现在我的函数应该返回一个映射,以员工姓名为键,以总经验为值。我如何使用java流(在单个流中)做到这一点

  • 我有两个(或更多)