簡體   English   中英

使用不可變對象創建TreeMultimap

[英]Creating a TreeMultimap with Immutable object

我目前正在使用不可變對象來構造具體對象。 嘗試創建TreeMultiMap

錯誤:期望在OrderKey中創建一個可比的地圖,如何將不可變的比較器設置為創建TreeMultiMap

//Does not compile here
SortedSetMultimap<ImmutableOrderKey, ImmutableOrder > orderMap= TreeMultimap.create();


@Value.Immutable
interface OrderKey {
    long orderNum();
}


@Value.Immutable
  interface Order {
  long orderNum();
  DateTime orderDate();
  String deliveryAddress();
}

一種解決方案是確保您的不可變對象實現Comparable接口。

如果您使用的是Java 8,則可以使用默認方法來實現:

@Value.Immutable
interface OrderKey extends Comparable<OrderKey> {
    long orderNum();

    default int compareTo(OrderKey o) {
        return orderNum() - o.orderNum();
    }
}

如果您是Java 8之前的用戶,請考慮使用抽象類而不是接口來實現相同的效果。


另一種方法(再次針對Java 8)是為創建方法提供比較器,例如:

Comparator<OrderKey> orderKeyCmp = Comparator.comparingLong(OrderKey::orderNum);
Comparator<Order> orderCmp = Comparator.comparing(Order::orderDate);

SortedSetMultimap<ImmutableOrderKey, ImmutableOrder> orderMap 
    = TreeMultimap.create(orderKeyCmp, orderCmp);

上面將根據orderNum字段對OrderKey實例進行排序,並根據orderDate字段對Order實例進行排序。

暫無
暫無

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

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