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