[英]Guava generic for Ordering
創建訂購通用方法有很大的問題。 目前,我具有以下功能:
public <T> T orderAscending(Function<?, ? extends Comparable> function, Iterable<? extends LinkedList<?>> sortingList) {
return Ordering.natural().onResultOf(function).sortedCopy(sortingList);
}
該函數的第一個參數是通過以下方式創建的:
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;
}
第二個是其中包含一些自定義對象的LinkedList( List<MyObject> test = new LinkedList<MyObject>()
)。
請有人幫助我修復此通用方法orderAscending
。 非常感謝您的幫助。
我猜您打算從DTO的Iterable
創建List
(按開始日期排序)(我假設您不希望DTO的列表可迭代)。
因此,假設您的DTO如下所示:
interface ParkingWebApiDTO { // could be simple class, etc.
Date getStartDate();
// ...and more methods here
}
您有輸入列表:
LinkedList<? extends ParkingWebApiDTO> iterable = Lists.newLinkedList();
和從DTO檢索開始日期的函數:
Function<ParkingWebApiDTO, Date> function = new Function<ParkingWebApiDTO, Date>() {
@Override
public Date apply(ParkingWebApiDTO dto) {
return dto.getStartDate();
}
};
您期望這樣的輸出:
List<? extends ParkingWebApiDTO> result = orderAscending(function, iterable);
這可以通過以下orderAscending
實現 :
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);
}
如果要具有“通用”方法,則需要將from和to類型都聲明為泛型類型。
另一件事是,如果您確實需要使用這樣的通用名稱,因為使用Ordering.natural().onResultOf(function).sortedCopy(list)
非常好,而orderAscending
是IMO的大材小用(您將以許多這樣的方法結束一)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.