gpt4 book ai didi

java - 使用 lambda 从 Map 返回前 n 个元素

转载 作者:搜寻专家 更新时间:2023-10-31 20:11:42 24 4
gpt4 key购买 nike

我有一个已排序的 Map 并想返回前 n 个元素。

public static Map getFirstEntries(final Map sortedMap, int elementsToReturn) {
elementsToReturn = (sortedMap.size() > elementsToReturn)
? elementsToReturn
: sortedMap.size();
return sortedMap.entrySet()
.stream()
.limit(elementsToReturn)
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue)));
}

最佳答案

看起来您至少已经解决了部分问题。不过,我建议进行一些改进。

您可能希望参数类型为 SortedMap,这样您就不会不小心传入没有定义顺序的普通 HashMap 之类的东西。您可能希望返回类型也为 SortedMap。要使其工作,您必须使用 Collectors.toMap 的四参数重载,其第四个参数是一个供应商,可让您控制 map 的构造。如果您不这样做,您将得到一个普通的 HashMap

第三个参数是合并函数,在合并同一个键的多个值时调用。你知道 key 是唯一的,因为你首先将它们从 map 中取出,所以我们不必担心这一点。我刚刚让它返回了第一个值,但你也可以让它抛出异常或其他东西。

最后,您不需要预先检查大小,因为如果 n 大于通过的条目数,limit(n) 将正常工作.

修改后的代码如下:

public static <K,V> SortedMap<K,V> getFirstEntries(SortedMap<K,V> sortedMap, int elementsToReturn) {
return sortedMap.entrySet()
.stream()
.limit(elementsToReturn)
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue,
(v1,v2) -> v1, TreeMap::new));
}

关于java - 使用 lambda 从 Map 返回前 n 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23262560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com