- 浏览: 7944616 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
Ordering类提供了一些链式的排序方法,相比JDK自带的排序方法更加简练、方便。
欢迎关注Java技术分享微信公众号:JavaQ
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));
}};
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())
);
}
}
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));
}};
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())
);
}
}
输入结果如下:
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));
}};
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())
);
}
}
输入结果如下:
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));
}};
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())
);
}
}
输出结果如下:
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));
}};
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())
);
}
}
输出结果如下:
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));
}};
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())
);
}
}
输出结果如下:
People{name=A, age=33}
People{name=C, age=18}
People{name=B, age=11}
欢迎关注Java技术分享微信公众号:JavaQ
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));
}};
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())
);
}
}
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));
}};
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())
);
}
}
输入结果如下:
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));
}};
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())
);
}
}
输入结果如下:
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));
}};
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())
);
}
}
输出结果如下:
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));
}};
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())
);
}
}
输出结果如下:
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));
}};
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())
);
}
}
输出结果如下:
People{name=A, age=33}
People{name=C, age=18}
People{name=B, age=11}
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1579方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2019前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3473info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2236import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 490https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 691public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 611https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 671https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 438https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5441 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3101微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 617https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1844什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 967本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1363原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 863public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 674在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 941-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 772一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1907介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
Guava的基础模块提供了许多实用工具类,包括但不限于: Predicates(谓词)、Functions(函数)、Optional(可选值)、Ordering(排序)等。它们可以帮助开发者构建更加模块化和可测试的代码,同时减少null指针异常...
### Google Guava Collections 使用介绍 #### 一、概述 Google Guava Collections 是 Java Collections Framework 的一个强大且实用的非官方扩展 API。它由 Google 工程师 Kevin Bourrillion 和 Jared Levy 在著名...
Guava对Java集合框架进行了扩展和优化,提供了如Multiset(多集)、Multimap(多映射)、ImmutableList、ImmutableSet、ImmutableMap等不可变集合,以及Ordering(排序)和Range(范围)等高级数据结构。这些类在...
6. **Ordering class**:Ordering 类提供了更方便的多关键字排序功能,可以替代使用 Comparator 的复杂代码。 除了以上提到的功能,Guava Collections 还包含许多其他实用工具,如 Predicates、Functions 和 Lists ...
1. **集合框架**:Guava对Java集合框架进行了扩展,引入了如Multiset(多集)、Multimap(多映射)、ImmutableList、ImmutableMap和ImmutableSet等不可变集合,以及Ordering(排序)和Range(范围)类。这些集合提供...
自2011年以来,Guava Collections不断更新和完善,成为Java开发者中备受推崇的工具库之一。 #### 二、目标读者与前置知识 Guava Collections的目标读者应当具备基础的Java知识,特别是对JDK5特性的理解和运用能力...
使用 Guava Ordering 选择 top-k return Ordering . natural() . leastOf(numbers, k); 使用 PriorityQueue 选择 top-k final PriorityQueue< Integer> queue = new PriorityQueue<> (numbers); List...
5. **排序(Ordering)**:Guava的Ordering类提供了一种流畅的Comparator接口,可以方便地创建和组合比较器,进行复杂的数据排序。 6. **异常处理(Throwables)**:简化了异常和错误的处理和传播,例如提供`...
Google的Guava库提供了Ordering类,可以方便地对Map进行排序: ```java Map, Integer> map = new HashMap(); // 添加元素... Map, Integer> sortedByValue = Maps.toMap( map.entrySet().stream(), entry -> ...
2. **双向映射**:`BiMap`接口提供了双向映射的功能,这意味着对于每个键,都有一个唯一的值与之对应,反之亦然。`HashBiMap`是实现`BiMap`的一个常见选择,可以方便地进行键值之间的相互查找。 3. **过滤映射**:`...