我正在努力使用Java Stream中的Generics

时间:2016-11-28 10:10:56

标签: java generics junit java-8 java-stream

我知道如何利用流中间和终端功能以及许多其他基本功能。 但我给出的任务让我难以实施。我一直在奋斗36小时不停。 我的任务如下:

  

以功能方式实现一个静态方法,它采用List<T>,对其进行过滤,对其进行排序,仅返回一定数量的值并跳过一定数量的值并对其应用映射函数。返回值应为List<R>。 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.)
    }
}

这是我的任务,我已经挣扎了很多,我很感激你的帮助。

1 个答案:

答案 0 :(得分:2)

你的单行应该看起来像

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());
    }

}

然后在JUnit上,你必须提供filterPredicate,comparatorT和mapTtoR参数的实现。