有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

是否可以将“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) 个答案

  1. # 1 楼答案

    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>),以明确该参数的用途