是否可以将“Java 8 方法引用”对象传递给流?
is it possible to pass a " Java 8 Method Reference" object to a stream?
我希望获取方法参考,即 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>
,但其中 none 似乎有效。
使用供应商或函数时,方法本身似乎没问题
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 是否存在未检测到错误的问题,或者是什么(有时会发生这种情况)。
有人对我如何解决这个问题有什么建议吗?非常感谢
one is 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>
),以明确该参数的用途。
我希望获取方法参考,即 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>
,但其中 none 似乎有效。
使用供应商或函数时,方法本身似乎没问题
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 是否存在未检测到错误的问题,或者是什么(有时会发生这种情况)。
有人对我如何解决这个问题有什么建议吗?非常感谢
one is
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>
),以明确该参数的用途。