日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Guava之Ordering

發(fā)布時(shí)間:2025/3/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Guava之Ordering 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Ordering類提供了一些鏈?zhǔn)降呐判蚍椒?#xff0c;相比JDK自帶的排序方法更加簡練、方便。
Ordering中有3種靜態(tài)方法用于創(chuàng)建Ordering排序器:



根據(jù)上面的方法創(chuàng)建Ordering后,可以繼續(xù)調(diào)用如下方法創(chuàng)建組合功能的排序器:



創(chuàng)建完Ordering排序器后,即可使用它對(duì)集合或元素進(jìn)行操作

下面介紹常用方法的使用。
以下示例代碼中使用到的People類包含name和age兩個(gè)屬性。
1.natural方法
該方法使用自然排序規(guī)則生成排序器,如從小到大、日期先后順序。使用這個(gè)方法之前先介紹一下onResultOf 方法,這個(gè)方法接收一個(gè)Function函數(shù),該函數(shù)的返回值可以用于natural方法排序的依據(jù),即根據(jù)這個(gè)返回值來進(jìn)行自然排序,示例代碼如下:
@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));
}};

Ordering<People> ordering = Ordering.natural().onResultOf(new Function<People, Comparable>() { @Override public Comparable apply(People people) { return people.getAge(); } }); for (People p : ordering.sortedCopy(peopleList)) { System.out.println(MoreObjects.toStringHelper(p) .add("name", p.getName()) .add("age", p.getAge()) ); } 復(fù)制代碼

}
sortedCopy方法會(huì)使用創(chuàng)建的排序器排序并生成一個(gè)新的List。對(duì)于Ordering.natural().onResultOf方法,閱讀順序是從后往前,即根據(jù)onResultOf 方法的返回值按照自然規(guī)則創(chuàng)建一個(gè)Ordering,然后調(diào)用sortedCopy方法排序并生成新List。輸出結(jié)果如下:
People{name=B, age=11}
People{name=C, age=18}
People{name=A, age=33}

2.reverse方法

這個(gè)方法使用反向的排序規(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));
}};

Ordering<People> ordering = Ordering.natural().reverse().onResultOf(new Function<People, Comparable>() { @Override public Comparable apply(People people) { return people.getAge(); } }); for (People p : ordering.sortedCopy(peopleList)) { System.out.println(MoreObjects.toStringHelper(p) .add("name", p.getName()) .add("age", p.getAge()) ); } 復(fù)制代碼

}
輸入結(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));
}};

Ordering<People> ordering = Ordering.usingToString().onResultOf(new Function<People, Comparable>() { @Override public Comparable apply(People people) { return people.getName(); } }); for (People p : ordering.sortedCopy(peopleList)) { System.out.println(MoreObjects.toStringHelper(p) .add("name", p.getName()) .add("age", p.getAge()) ); } 復(fù)制代碼

}
輸入結(jié)果如下:
People{name=A, age=33}
People{name=B, age=11}
People{name=C, age=18}
同時(shí)使用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));
}};

Ordering<People> ordering = Ordering.usingToString().reverse().onResultOf(new Function<People, Comparable>() { @Override public Comparable apply(People people) { return people.getName(); } }); for (People p : ordering.sortedCopy(peopleList)) { System.out.println(MoreObjects.toStringHelper(p) .add("name", p.getName()) .add("age", p.getAge()) ); } 復(fù)制代碼

}
輸出結(jié)果如下:
People{name=C, age=18}
People{name=B, age=11}
People{name=A, age=33}

4.from方法

該方法接收一個(gè)自定義的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));
}};

Ordering<People> ordering = Ordering.from(new Comparator<People>() { @Override public int compare(People o1, People o2) { return o1.getAge() - o2.getAge(); } }); for (People p : ordering.sortedCopy(peopleList)) { System.out.println(MoreObjects.toStringHelper(p) .add("name", p.getName()) .add("age", p.getAge()) ); } 復(fù)制代碼

}
輸出結(jié)果如下:
People{name=B, age=11}
People{name=C, age=18}
People{name=A, age=33}
同時(shí)使用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));
}};

Ordering<People> ordering = Ordering.from(new Comparator<People>() { @Override public int compare(People o1, People o2) { return o1.getAge() - o2.getAge(); } }).reverse(); for (People p : ordering.sortedCopy(peopleList)) { System.out.println(MoreObjects.toStringHelper(p) .add("name", p.getName()) .add("age", p.getAge()) ); } 復(fù)制代碼

}
輸出結(jié)果如下:
People{name=A, age=33}
People{name=C, age=18}
People{name=B, age=11}


總結(jié)

以上是生活随笔為你收集整理的Guava之Ordering的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。