java使用lambdas从映射返回前n个元素
我有一个已排序的映射,希望返回前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)));
}
# 1 楼答案
看起来你至少解决了一些问题。不过,我建议进行一些改进
您可能希望参数类型为
SortedMap
,这样就不会意外地传入没有定义顺序的普通HashMap
。您可能还希望返回类型为SortedMap
。为了实现这一点,您必须使用Collectors.toMap
的四个arg重载,它的第四个arg是一个供应商,可以让您控制地图的构造。如果你不这么做,你会得到一个普通的HashMap
第三个参数是merge函数,当同一个键的多个值被合并时调用该函数。你知道这些钥匙是独一无二的,因为你首先要把它们从地图上取出来,所以我们不必担心这一点。我刚刚让它返回第一个值,但你也可以让它抛出异常或其他东西
最后,您不需要预先检查大小,因为如果
n
大于通过的条目数,那么limit(n)
就可以正常工作修订后的守则如下: