Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我正在努力处理Java流中的泛型_Java_Generics_Junit_Java 8_Java Stream - Fatal编程技术网

我正在努力处理Java流中的泛型

我正在努力处理Java流中的泛型,java,generics,junit,java-8,java-stream,Java,Generics,Junit,Java 8,Java Stream,我知道如何利用流的中间和终端功能,以及许多其他基本的东西。 但是给我的任务对我来说很难实现。在过去的36个小时里,我一直在苦苦挣扎。 我的任务如下: 以函数的方式实现一个静态方法,该方法接受列表,对其进行过滤、排序,仅返回一定数量的值,跳过一定数量的值,并对其应用映射函数。返回值应为列表。T和R是未指定的泛型类型。所有需要的值应为参数。限制和偏移应为可选。 使用JUnit测试您的方法 到目前为止,我只能设法写代码,我被困在第一步过滤器。困惑是,如果我不知道列表的类型,我如何过滤它 public

我知道如何利用流的中间和终端功能,以及许多其他基本的东西。 但是给我的任务对我来说很难实现。在过去的36个小时里,我一直在苦苦挣扎。 我的任务如下:

以函数的方式实现一个静态方法,该方法接受
列表
,对其进行过滤、排序,仅返回一定数量的值,跳过一定数量的值,并对其应用映射函数。返回值应为
列表
。T和R是未指定的泛型类型。所有需要的值应为参数。限制和偏移应为可选。 使用JUnit测试您的方法

到目前为止,我只能设法写代码,我被困在第一步过滤器。困惑是,如果我不知道列表的类型,我如何过滤它

public class GeneralMethods<T,R> {

    private List<T> recList;
    private List<R> retList;

    public void manipulateList(){
        retList = recList.stream().filter(s -> s.)
    }
}
公共类通用方法{
私人名单;
私人名单;
公营证券交易商(){
retList=recList.stream().filter(s->s.)
}
}

这是我的任务,我一直在努力,我会感谢你的帮助。

你的一行应该看起来像

public class GeneralMethods<T,R> {

    public List<R> manipulateList(List<T> recList,
                                   Predicate<T> filterPredicate,
                                   Comparator<T> comparatorT,
                                   Function<T,R> mapTtoR,
                                   long ... limitAndOffset){

        return recList.stream()
                      .filter(filterPredicate)
                      .sorted(comparatorT)
                      .skip(limitAndOffset.length > 1 ? limitAndOffset[1] : 0)
                      .limit(limitAndOffset.length > 0 ? limitAndOffset[0] : Long.MAX_VALUE)
                      .map(mapTtoR)
                      .collect(toList());
    }

}
公共类通用方法{
公共列表操作列表(列表重新列表,
谓词过滤器预测,
比较器比较器,
函数映射器,
长…限制和偏移){
return recList.stream()
.过滤器(过滤器预测)
.已排序(比较排序)
.跳过(limitAndOffset.length>1?limitAndOffset[1]:0)
.limit(limitAndOffset.length>0?limitAndOffset[0]:Long.MAX_值)
.map(maptor)
.collect(toList());
}
}

然后在JUnit上,您必须提供filterPredicate、ComparePort和mapTtoR参数的实现。

将一个
谓词
传递给
操纵列表
,并使用它来过滤输入列表。首先,您应该创建一个静态方法。相反,您创建了一个基于状态的非静态方法。而且没有参数。我建议您编写正确的签名,其余的将更容易。除了您对
静态方法的困惑之外,您似乎正在努力理解您不必编写过滤函数。方法的调用者将。您只需要接受一个适当的
谓词
参数并将其传递给流。您注意到需要创建一个
静态
方法吗?此外,您提供的方法可以接受几乎任意数量的尾随
int
参数。我敢打赌,没有老师会喜欢这个。是的,一个更具Java8功能的方法是公共静态列表操纵列表(列表重排,谓词filterPredicate,Comparator Comparator,函数映射器,可选限制,可选偏移量){return recList.stream().filter(filterPredicate).sorted(Comparator端口)。skip(offset.orElse(0l)).limit(limit.orElse(Long.MAX_VALUE)).map(maptor.collect(toList());}将其放入您的答案中;您知道,您可以这样做。如果您想复制粘贴格式化代码,您可以使用。谢谢Sergio Montoro,我从您的代码中获得了非常好的想法。:)