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