簡體   English   中英

番石榴訂購通用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM