是否可以将" Java 8 Method Reference"对象传递给流?



我希望获得一个方法引用,即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是否检测不到错误,或者是什么问题(因为有时会发生这种情况(。

有人对我如何解决这个问题有什么建议吗?非常感谢

一个是Function<Object,Object>

使用Function<Person, Integer>,并传入List<Person>

public static void sortStream(List<Person> list, Function<Person, Integer> fn) { ... }

如果你想让它通用,你可以做:

public static <P, C extends Comparable<? super C>> void sortStream(
List<P> list, Function<? super P, ? extends C> fn) { ... }

当然,也可以直接传入Comparator<P>(或Comparator<? super P>(,以明确该参数的用途。

相关内容

  • 没有找到相关文章

最新更新