use*_*187 5 java lambda java-8
我有一个有序的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)));
}
Run Code Online (Sandbox Code Playgroud)
看起来您至少已经解决了一些问题。不过,我建议进行一些改进。
您可能希望参数类型是这样SortedMap
,这样您就不会意外地传递诸如HashMap
没有定义顺序的普通内容之类的内容。SortedMap
您可能还希望返回类型为 a 。要实现此功能,您必须使用 的四参数重载Collectors.toMap
,其第四个参数是一个供应商,可让您控制地图的构造。如果你不这样做,你会得到一个普通的HashMap
.
第三个参数是合并函数,当合并同一键的多个值时调用该函数。您知道这些键是唯一的,因为您首先是从地图中获取它们的,所以我们不必担心这一点。我刚刚让它返回第一个值,但你也可以让它抛出异常或其他东西。
最后,您不需要预先检查大小,因为如果大于通过的条目数,则limit(n)
可以正常工作。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));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1552 次 |
最近记录: |