guava api_使用Google Guava的订购API
guava api
我們在Google的Guava庫中玩的更多,這真是一個了不起的庫! 我們用于它的最新內容是為我們的域對象整理比較器。 這是如何做。 使用Apache Isis的JDO Objectstore ,使您的類實現java.lang.Comparable ,并對集合使用SortedSet是一個好習慣。 您可以在Isis的quickstart原型中看到這一點,其中ToDoItem與它自身具有遞歸關系:
但是,如何最好地實現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 Ordering<Boolean> BOOLEAN_NULLS_LAST = Ordering.<Boolean>natural().nullsLast();public static final Ordering<LocalDate> LOCAL_DATE_NULLS_LAST = Ordering.<LocalDate>natural().nullsLast();public static final Ordering<String> STRING_NULLS_LAST = Ordering.<String>natural().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 Ordering<ToDoItem> ORDERING_BY_COMPLETE = new Ordering<ToDoItem>(){public int compare(ToDoItem p, ToDoItem q) {return Orderings.BOOLEAN_NULLS_LAST.compare(p.isComplete(), q.isComplete());}};public static Ordering<ToDoItem> 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 Ordering<ToDoItem> 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
guava api
總結
以上是生活随笔為你收集整理的guava api_使用Google Guava的订购API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 唱歌的英文怎么读 唱歌英文如何说
- 下一篇: Storm和Kafka集成的重要生产错误