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