Java 番石榴属植物
我有相当大的问题,创建通用方法订购。现在我有了这个功能:Java 番石榴属植物,java,generics,collections,guava,Java,Generics,Collections,Guava,我有相当大的问题,创建通用方法订购。现在我有了这个功能: public <T> T orderAscending(Function<?, ? extends Comparable> function, Iterable<? extends LinkedList<?>> sortingList) { return Ordering.natural().onResultOf(function).sortedCopy(sortingList);
public <T> T orderAscending(Function<?, ? extends Comparable> function, Iterable<? extends LinkedList<?>> sortingList) {
return Ordering.natural().onResultOf(function).sortedCopy(sortingList);
}
public T order升序(函数>排序列表){
返回Ordering.natural().onResultOf(函数).sortedCopy(排序列表);
}
此函数的第一个参数是这样创建的:
public static Function<ParkingWebApiDTO, Date> getSortActiveParkingsByStartDate() {
Function<ParkingWebApiDTO, Date> getStartDateFunction = new Function<ParkingWebApiDTO, Date>() {
@Override
public Date apply(ParkingWebApiDTO parkingWebApiDTO) {
return parkingWebApiDTO.getStartDate();
}
};
return getStartDateFunction;
}
公共静态函数getSortActiveParkingByStartDate(){
函数getStartDateFunction=新函数(){
@凌驾
公开日期申请(ParkingWebApiDTO ParkingWebApiDTO){
返回parkingWebApiDTO.getStartDate();
}
};
返回getStartDate函数;
}
第二个是LinkedList,其中包含一些自定义对象(List test=new LinkedList()
)
请有人帮助我修复此通用方法
ordersupsing
。非常感谢您的帮助。我想您是想从DTO的Iterable
创建列表(按开始日期排序)(我假设您不想要Iterable的DTO列表)
假设您的DTO如下所示:
interface ParkingWebApiDTO { // could be simple class, etc.
Date getStartDate();
// ...and more methods here
}
List<? extends ParkingWebApiDTO> result = orderAscending(function, iterable);
您有输入列表:
LinkedList<? extends ParkingWebApiDTO> iterable = Lists.newLinkedList();
如果希望有“通用”方法,则需要将from和to类型声明为泛型类型
另一件事是如果你真的需要有这样的通用名称,因为使用Ordering.natural().onResultOf(function).sortedCopy(list)
是非常好的,而使用orderAscending
则是一种过火的行为(你会得到很多类似这样的方法).您忘了提到实际问题是什么……编译问题:)然后您可以与我们分享编译错误吗?这可能是泛型类型推断的另一个问题。或者可能是sortedCopy()
(来自Iterable
输入的列表
)的结果作为T
返回……太棒了!多谢各位。这就是我要找的。
List<? extends ParkingWebApiDTO> result = orderAscending(function, iterable);
public static <X, T extends Comparable<T>> List<? extends X> orderAscending(
Function<X, T> function, Iterable<? extends X> sortingList) {
return Ordering.natural().onResultOf(function).sortedCopy(sortingList);
}