java将lambda作为方法arg和排序映射传递
我必须创建排序方法,用映射参数和lambda表达式调用。该方法返回作为第一个参数传递的任何映射的排序版本,排序顺序由作为第二个参数给出的lambda表达式确定。
我创建了这样的东西(不能正常工作):
public Map sorted(Map map, Function<Set> funct){
System.out.println(map.entrySet()
.stream()
.sorted((Comparator) funct)
.collect(Collectors.toList()));
return null;
}
有什么想法吗
谢谢你的帮助;)
# 1 楼答案
如果您想要一个排序映射,它将是一个
TreeMap
,并且假设比较器按Key
排序,它可以如下所示:对它的调用如下所示,例如:
# 2 楼答案
Function声明了2个泛型参数:T和R,但您只给出了1个泛型参数
Set
将流收集到映射可以使用Collectors.toMap而不是将流收集到列表的Collectors.toList
Comparator更像是BiFunction/ToIntBiFunction,因为函数接口的通用参数数量包括参数&;返回类型
如果您想将
ToIntBiFunction
引用到Comparator
,您可以使用以下方法:# 3 楼答案
当我读到这个问题时,我想到了一个更一般的解决方案,在这个解决方案中,您可以根据键或值对地图进行排序。在这种情况下,解决方案如下所示:
如果要按值排序,可以使用以下方法: