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