Guava之Ordering
Ordering類提供了一些鏈式的排序方法,相比JDK自帶的排序方法更加簡練、方便。
Ordering中有3種靜態方法用于創建Ordering排序器:
根據上面的方法創建Ordering后,可以繼續調用如下方法創建組合功能的排序器:
創建完Ordering排序器后,即可使用它對集合或元素進行操作
下面介紹常用方法的使用。
以下示例代碼中使用到的People類包含name和age兩個屬性。
1.natural方法
該方法使用自然排序規則生成排序器,如從小到大、日期先后順序。使用這個方法之前先介紹一下onResultOf 方法,這個方法接收一個Function函數,該函數的返回值可以用于natural方法排序的依據,即根據這個返回值來進行自然排序,示例代碼如下:
@Test
public void testNatural() {
List<People> peopleList = new ArrayList<People>() {{
add(new People("A", 33));
add(new People("B", 11));
add(new People("C", 18));
}};
}
sortedCopy方法會使用創建的排序器排序并生成一個新的List。對于Ordering.natural().onResultOf方法,閱讀順序是從后往前,即根據onResultOf 方法的返回值按照自然規則創建一個Ordering,然后調用sortedCopy方法排序并生成新List。輸出結果如下:
People{name=B, age=11}
People{name=C, age=18}
People{name=A, age=33}
2.reverse方法
這個方法使用反向的排序規則來排序,即若使用natural規則創建Ordering后,再接著調用reverse方法,則按照自然規則的反向,從大到小的規則排序,示例代碼如下:
@Test
public void testReverse() {
List<People> peopleList = new ArrayList<People>() {{
add(new People("A", 33));
add(new People("B", 11));
add(new People("C", 18));
}};
}
輸入結果如下:
People{name=A, age=33}
People{name=C, age=18}
People{name=B, age=11}
3.usingToString方法
該方法創建Ordering,并根據排序依據值的toString方法值來使用natural規則排序,示例代碼如下:
@Test
public void testUsingToString() {
List<People> peopleList = new ArrayList<People>() {{
add(new People("A", 33));
add(new People("B", 11));
add(new People("C", 18));
}};
}
輸入結果如下:
People{name=A, age=33}
People{name=B, age=11}
People{name=C, age=18}
同時使用usingToString和reverse方法示例代碼如下:
@Test
public void testUsingToStringAndReverse() {
List<People> peopleList = new ArrayList<People>() {{
add(new People("A", 33));
add(new People("B", 11));
add(new People("C", 18));
}};
}
輸出結果如下:
People{name=C, age=18}
People{name=B, age=11}
People{name=A, age=33}
4.from方法
該方法接收一個自定義的Comparator比較器來創建Ordering,根據Comparator中的自定義規則排序,示例代碼如下:
@Test
public void testFrom() {
List<People> peopleList = new ArrayList<People>() {{
add(new People("A", 33));
add(new People("B", 11));
add(new People("C", 18));
}};
}
輸出結果如下:
People{name=B, age=11}
People{name=C, age=18}
People{name=A, age=33}
同時使用from和reverse方法,示例代碼如下:
@Test
public void testFromAndReverse() {
List<People> peopleList = new ArrayList<People>() {{
add(new People("A", 33));
add(new People("B", 11));
add(new People("C", 18));
}};
}
輸出結果如下:
People{name=A, age=33}
People{name=C, age=18}
People{name=B, age=11}
總結
以上是生活随笔為你收集整理的Guava之Ordering的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python瓦匠 —— 正则表达式(五)
- 下一篇: 垂直居中 absolute 和 fle