Java 8 中 List 的 Comparator.comparing 中的链方法

Har*_*Rao 4 java java-8

我有以下对象

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

Class Event{
  private Integer value;
}
Run Code Online (Sandbox Code Playgroud)
  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. 请注意,这两个类都是第三方的,因此我无法更改它们。

Eug*_*ene 5

这很简单:

trades.sort(Comparator.comparingInt(x -> x.getEventId().getValue()));
Run Code Online (Sandbox Code Playgroud)

另请注意,您的版本在Comparator.comparing(Trade::getEventId).thenComparing(Event::getValue)语义上意味着您首先要进行排序eventIdvalue这看起来并不是您想要的。