[英]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;
}
Comparator.comparing(Trade::getEventId().getValue())
所以現在我選擇了通常的lambda,如下所示
someList.sort((Trade o1, Trade o2) -> o1.getEventId().getValue().compareTo(o2.getEventId().getValue()))
;
它很有用但很想知道#1是否可行?
Comparator.comparing(Trade::getEventId).thenComparing(Event::getValue)
但沒有快樂。 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.