是否可以将“Java8方法引用”对象传递给流?
我希望获取一个方法引用,即Person::getAge
,并将其作为参数传递给流中使用
因此,与其按照
personList.stream().sorted(Comparator.comparing(Person::getAge)).collect(Collectors.toList());
我正在找工作
sortStream(personList, Person::gerAge)
和排序流方法
public static void sortStream(List<Object> list, ???)
{
list.stream()
.sorted(Comparator.comparing(???))
.collect(Collectors.toList());
}
我四处寻找,发现了两种类型,一种是Function<Object,Object>
,另一种是Supplier<Object>
,但它们似乎都不起作用
当使用供应商或函数时,方法本身似乎很好
sortStream(List<Object>, Supplier<Object> supplier)
{
list.stream()
.sorted((Comparator<? super Object>) supplier)
.collect(Collectors.toList());
}
但是当调用 sortStream(personList, Person::gerAge)
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous sym type:
没有显示真正的错误,因此我不确定Netbeans是否存在未检测到错误的问题,或者是什么问题(有时会发生这种情况)
有人对我如何解决这个问题有什么建议吗?多谢各位
# 1 楼答案
使用
Function<Person, Integer>
,并同时传入一个List<Person>
:如果要使其通用,可以执行以下操作:
当然,您也可以直接传入
Comparator<P>
(或Comparator<? super P>
),以明确该参数的用途