当前位置: 首页 > 面试题库 >

使用Java8 Stream从地图中查找最高值

双浩涆
2023-03-14
问题内容

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

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;
}

问题答案:

您可以通过以下方式获得一个钥匙

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()返回JavaStream中的所有最大值?
”中讨论了单次获取流的所有最大值的解决方案。”。您将看到,如果您的输入是普通的Map(例如HashMap),可以很便宜地进行多次迭代,那么单遍解决方案将变得更加复杂并且不值得付出努力。



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

  • 问题内容: 我有许多具有不同z-index的div元素。我想在这些div中找到最高的z索引-如何实现呢? CSS: HTML: 我不认为这条线可以找到最高的z-index。 问题答案: 请注意,z-index仅影响定位的元素。因此,即使您为其分配了值,带有的任何元素也不会具有z- index。在诸如Google Chrome之类的浏览器中尤其如此。 像这样的通用jQuery选择器与返回一个值的选项

  • 我一直在研究这三个网站,了解如何使用log4j2创建地图查找(或任何其他查找): http://logging.apache.org/log4j/2.x/manual/extending.html#Lookups http://logging.apache.org/log4j/2.x/manual/lookups.html http://logging.apache.org/log4j/2.x/m

  • 我是streams的新手,我试图在这个映射中筛选键/值对中的第一个真值,然后我想返回字符串键,并用false替换真值。 我有一个字符串/布尔值的地图: 这就是我卡住的地方——我可能也做错了第一部分,但是我不确定如何在同一个流中返回字符串值和替换布尔值?我打算在这里尝试使用收集来处理返回值,但是我想如果我这样做了,它可能会返回一个Set,而不仅仅是字符串。 我可以这样做,但我更愿意尝试返回字符串。我

  • 问题内容: 我有3个div。 像这样: 他们将充满文字。我不确定多少。问题是,所有高度都必须相等。 我如何使用jQuery(或CSS)查找DIV最高的并将其他两个设置为相同的高度,从而创建3个相等高度的DIV。 这可能吗? 问题答案: 您不能轻松地通过高度选择或在CSS中进行比较,但是jQuery和一些迭代应该可以轻松解决此问题。我们将遍历每个元素并跟踪最高的元素,然后再次遍历并将每个元素的高度设

  • 我有一节这样的课 如果我有一个此类对象的列表,如下所示