我目前正在使用immutables来构建具体对象。
我在尝试创建TreeMultiMap
时面临一个问题。
错误:期望在OrderKey
中创建地图,
如何使用immutables设置比较器以创建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();
}
答案 0 :(得分:2)
一种解决方案是确保您的Immutable对象实现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);
以上内容将根据OrderKey
字段对orderNum
个实例进行排序,并根据Order
字段对orderDate
个实例进行排序。