免费推广网站平台,潍坊建设企业网站,如何建设教师网上授课网站,饰品网站设计方案我们一直在使用Google的Guava库做更多的事情-多么出色的库#xff01; 我们用于它的最新内容是为我们的域对象整理比较器。 就是这样。 使用Apache Isis的JDO Objectstore #xff0c;使您的类实现java.lang.Comparable #xff0c;并对集合使用SortedSet是一个好习惯。 您可… 我们一直在使用Google的Guava库做更多的事情-多么出色的库 我们用于它的最新内容是为我们的域对象整理比较器。 就是这样。 使用Apache Isis的JDO Objectstore 使您的类实现java.lang.Comparable 并对集合使用SortedSet是一个好习惯。 您可以在Isis的quickstart原型中看到这一点其中ToDoItem具有递归关系 public class ToDoItem implements ComparableToDoItem {...private SortedSetToDoItem dependencies Sets.newTreeSet();...
} 但是如何最好地实现compareTo方法 这是原始的实现 public int compareTo(final ToDoItem other) {if (isComplete() !other.isComplete()) {return 1;}if (!isComplete() other.isComplete()) {return -1;}if (getDueBy() null other.getDueBy() ! null) {return 1;}if (getDueBy() ! null other.getDueBy() null) {return -1;}if (getDueBy() null other.getDueBy() null ||getDueBy().equals(this.getDueBy())) {return getDescription().compareTo(other.getDescription());}return getDueBy().compareTo(getDueBy());} k 基本上说 *在尚未完成的对象之前订购尚未完成的对象 *如果有平局请按截止日期排序最后将没有截止日期的那些放在最后 *如果有领带请按描述排序。 这是使用Guava的Ordering类重写的方法。 首先让我们为标量类型创建一些Ordering实例 public final class Orderings {public static final OrderingBoolean BOOLEAN_NULLS_LAST Ordering.Booleannatural().nullsLast();public static final OrderingLocalDate LOCAL_DATE_NULLS_LAST Ordering.LocalDatenatural().nullsLast();public static final OrderingString STRING_NULLS_LAST Ordering.Stringnatural().nullsLast();private Orderings(){}
} 现在我们可以以声明方式重写ToDoItem的compareTo()方法 public class ToDoItem implements Comparable {...public int compareTo(ToDoItem o) {return ORDERING_BY_COMPLETE.compound(ORDERING_BY_DUE_BY).compound(ORDERING_BY_DESCRIPTION).compare(this, o);}public static OrderingToDoItem ORDERING_BY_COMPLETE new OrderingToDoItem(){public int compare(ToDoItem p, ToDoItem q) {return Orderings.BOOLEAN_NULLS_LAST.compare(p.isComplete(), q.isComplete());}};public static OrderingToDoItem ORDERING_BY_DUE_BY new Ordering()ToDoItem{public int compare(ToDoItem p, ToDoItem q) {return Orderings.BOOLEAN_NULLS_LAST.compare(p.getDueBy(), q.getDueBy());}};public static OrderingToDoItem ORDERING_BY_DESCRIPTION new Ordering()ToDoItem{public int compare(ToDoItem p, ToDoItem q) {return Orderings.STRINGS_NULLS_LAST.compare(p.getDescription(), q.getDescription());}}; 现在诚然这几乎不能保证在单个类中仅使用一个方法就可以拥有所有样板。 当然不是 但是我们现在拥有的是一个小代数可以用来在域模型中的所有域类之间进行组合。 使用ToDoItem其他域类可以使用ToDoItem的自然排序从Ordering.natural()访问进行Ordering.natural() 也可以使用各种ToDoItem.ORDERING_BY_xxx排序来创建新的排序。 参考 Dan Haywood博客博客中使用了我们的JCG合作伙伴 Dan Haywood的Google Guava的Ordering API 。 翻译自: https://www.javacodegeeks.com/2013/02/using-google-guavas-ordering-api.html