繁体   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