簡體   English   中英

Comparator中的鏈方法。比較Java 8中的List

[英]Chain methods in Comparator.comparing of List in Java 8

我有以下對象

Class Trade{
   private Integer tradeId;
   private Event  eventId;
   private Integer tradeVersion;
}

Class Event{
  private Integer value;
}
  1. 對於上面的場景,我試着寫一些像Comparator.comparing(Trade::getEventId().getValue())
  2. 以上都行不通
  3. 所以現在我選擇了通常的lambda,如下所示

    someList.sort((Trade o1, Trade o2) -> o1.getEventId().getValue().compareTo(o2.getEventId().getValue())) ;

它很有用但很想知道#1是否可行?

  1. 嘗試過Comparator.comparing(Trade::getEventId).thenComparing(Event::getValue)但沒有快樂。
  2. 請注意,這兩個類都是第三方,所以我不能改變它們。

Expression Comparator.comparing(Trade::getEventId().getValue())不起作用,因為這是無效的方法引用 使用::運算符,您可以引用單個方法,如Trade::getEventId 這與以下lambda表達式等效:

trade -> trade.getEventId()

雖然您可以嘗試使用以下Function<Trade, Integer>表示為以下lambda表達式:

(Function<Trade, Integer>) trade -> trade.getEventId().getValue()

然后您的比較器可以定義為:

Comparator.comparing((Function<Trade, Integer>) trade -> trade.getEventId().getValue())

PS:可能會避免轉換為Function<Trade, Integer>

它很簡單:

trades.sort(Comparator.comparingInt(x -> x.getEventId().getValue()));

另請注意,使用Comparator.comparing(Trade::getEventId).thenComparing(Event::getValue)在語義上意味着您首先eventId排序,然后按value看起來不是您想要的value

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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