点击上方“Java基基”,选择“设为星标”
做积极的人,而不是积极废人!
每天 14:00 更新文章,每天掉亿点点头发...
源码精品专栏
原创 | Java 2021 超神之路,很肝~
中文详细注释的开源项目
RPC 框架 Dubbo 源码解析
网络应用框架 Netty 源码解析
消息中间件 RocketMQ 源码解析
数据库中间件 Sharding-JDBC 和 MyCAT 源码解析
作业调度中间件 Elastic-Job 源码解析
分布式事务中间件 TCC-Transaction 源码解析
Eureka 和 Hystrix 源码解析
Java 并发源码
来源:blog.csdn.net/qq_31635851
1.使用Stream sorted()完成自然排序、比较器和反向排序
2.在List中使用Stream sorted()方法
3.在Set中使用Stream sorted()方法
4.在Map中使用Stream sorted()方法
在本页中,我们将提供 java 8 Stream sorted()排序的示例。我们可以按照自然顺序和比较器提供的顺序对流进行排序。
在Java8中,可以使用lambda表达式实例化比较器(Comparator)。
我们还可以颠倒自然顺序和比较器(Comparator)提供的顺序。
自然排序使用Comparable提供的排序,该排序必须由实例为流元素的类实现。
在本页中,我们将使用java 8 Stream sorted()方法对列表List, Map和Set进行排序。
下面是sorted()方法的语法
sorted()
:它使用自然顺序对流中的元素进行排序。元素类必须实现Comparable接口。
sorted(Comparator super T> comparator)
:这里我们使用lambda表达式创建一个Comparator实例。我们可以按升序和降序对流元素进行排序。
下面的代码行将按自然顺序对列表进行排序。
list.stream().sorted()
要反转自然顺序,Comparator提供reverseOrder()
方法。
list.stream().sorted(Comparator.reverseOrder())
下面的代码行使用Comparator对列表进行排序。
list.stream().sorted(Comparator.comparing(Student::getAge))
为了颠倒顺序,Comparator提供reversed()
方法。
list.stream().sorted(Comparator.comparing(Student::getAge).reversed())
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能。
项目地址:https://github.com/YunaiV/ruoyi-vue-pro
下面我们对Student列表进行排序操作。首先,我们将按自然顺序排序,然后使用比较器(Comparator)。
下面是颠倒自然排序和比较器提供的排序的例子。
SortList.java
package com.concretepage;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class SortList {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Student(1, "Mahesh", 12));
list.add(new Student(2, "Suresh", 15));
list.add(new Student(3, "Nilesh", 10));
System.out.println("---Natural Sorting by Name---");
List slist = list.stream().sorted().collect(Collectors.toList());
slist.forEach(e -> System.out.println("Id:"+ e.getId()+", Name: "+e.getName()+", Age:"+e.getAge()));
System.out.println("---Natural Sorting by Name in reverse order---");
slist = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
slist.forEach(e -> System.out.println("Id:"+ e.getId()+", Name: "+e.getName()+", Age:"+e.getAge()));
System.out.println("---Sorting using Comparator by Age---");
slist = list.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList());
slist.forEach(e -> System.out.println("Id:"+ e.getId()+", Name: "+e.getName()+", Age:"+e.getAge()));
System.out.println("---Sorting using Comparator by Age with reverse order---");
slist = list.stream().sorted(Comparator.comparing(Student::getAge).reversed()).collect(Collectors.toList());
slist.forEach(e -> System.out.println("Id:"+ e.getId()+", Name: "+e.getName()+", Age:"+e.getAge()));
}
}
Student.java
package com.concretepage;
public class Student implements Comparable {
private int id;
private String name;
private int age;
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Student ob) {
return name.compareTo(ob.getName());
}
@Override
public boolean equals(final Object obj) {
if (obj == null) {
return false;
}
final Student std = (Student) obj;
if (this == std) {
return true;
} else {
return (this.name.equals(std.name) && (this.age == std.age));
}
}
@Override
public int hashCode() {
int hashno = 7;
hashno = 13 * hashno + (name == null ? 0 : name.hashCode());
return hashno;
}
}
输出
---Natural Sorting by Name---
Id:1, Name: Mahesh, Age:12
Id:3, Name: Nilesh, Age:10
Id:2, Name: Suresh, Age:15
---Natural Sorting by Name in reverse order---
Id:2, Name: Suresh, Age:15
Id:3, Name: Nilesh, Age:10
Id:1, Name: Mahesh, Age:12
---Sorting using Comparator by Age---
Id:3, Name: Nilesh, Age:10
Id:1, Name: Mahesh, Age:12
Id:2, Name: Suresh, Age:15
---Sorting using Comparator by Age with reverse order---
Id:2, Name: Suresh, Age:15
Id:1, Name: Mahesh, Age:12
Id:3, Name: Nilesh, Age:10
基于微服务的思想,构建在 B2C 电商场景下的项目实战。核心技术栈,是 Spring Boot + Dubbo 。未来,会重构成 Spring Cloud Alibaba 。
项目地址:https://github.com/YunaiV/onemall
下面我们对Student类的集合(Set)进行排序操作,此类必须重写equals()
和hashCode()
方法来标识唯一的元素。
对于自然排序,学生类需要实现Comparable接口。
在下面的例子中,我们将使用自然排序和比较器提供的排序对集合进行排序。
SortSet.java
package com.concretepage;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
public class SortSet {
public static void main(String[] args) {
Set set = new HashSet();
set.add(new Student(1, "Mahesh", 12));
set.add(new Student(2, "Suresh", 15));
set.add(new Student(3, "Nilesh", 10));
System.out.println("---Natural Sorting by Name---");
set.stream().sorted().forEach(e -> System.out.println("Id:"
+ e.getId()+", Name: "+e.getName()+", Age:"+e.getAge()));
System.out.println("---Natural Sorting by Name in reverse order---");
set.stream().sorted(Comparator.reverseOrder()).forEach(e -> System.out.println("Id:"
+ e.getId()+", Name: "+e.getName()+", Age:"+e.getAge()));
System.out.println("---Sorting using Comparator by Age---");
set.stream().sorted(Comparator.comparing(Student::getAge))
.forEach(e -> System.out.println("Id:"+ e.getId()+", Name: "+e.getName()+", Age:"+e.getAge()));
System.out.println("---Sorting using Comparator by Age in reverse order---");
set.stream().sorted(Comparator.comparing(Student::getAge).reversed())
.forEach(e -> System.out.println("Id:"+ e.getId()+", Name: "+e.getName()+", Age:"+e.getAge()));
}
}
输出
---Natural Sorting by Name---Id:1, Name: Mahesh, Age:12Id:3, Name: Nilesh, Age:10Id:2, Name: Suresh, Age:15---Natural Sorting by Name in reverse order---Id:2, Name: Suresh, Age:15Id:3, Name: Nilesh, Age:10Id:1, Name: Mahesh, Age:12---Sorting using Comparator by Age---Id:3, Name: Nilesh, Age:10Id:1, Name: Mahesh, Age:12Id:2, Name: Suresh, Age:15---Sorting using Comparator by Age in reverse order---Id:2, Name: Suresh, Age:15Id:1, Name: Mahesh, Age:12Id:3, Name: Nilesh, Age:10
这里我们将按键和值对Map进行排序。
SortMap.java
package com.concretepage;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
public class SortMap {
public static void main(String[] args) {
Map map = new HashMap<>();
map.put(15, "Mahesh");
map.put(10, "Suresh");
map.put(30, "Nilesh");
System.out.println("---Sort by Map Value---");
map.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getValue))
.forEach(e -> System.out.println("Key: "+ e.getKey() +", Value: "+ e.getValue()));
System.out.println("---Sort by Map Key---");
map.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getKey))
.forEach(e -> System.out.println("Key: "+ e.getKey() +", Value: "+ e.getValue()));
}
}
输出
---Sort by Map Value---
Key: 15, Value: Mahesh
Key: 30, Value: Nilesh
Key: 10, Value: Suresh
---Sort by Map Key---
Key: 10, Value: Suresh
Key: 15, Value: Mahesh
Key: 30, Value: Nilesh
下面我们要对值为自定义对象的Map进行排序。
SortMapOfCustomObject.java
package com.concretepage;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
public class SortMapOfCustomObject {
public static void main(String[] args) {
Map map = new HashMap<>();
map.put(1, new Student(1, "Mahesh", 12));
map.put(2, new Student(2, "Suresh", 15));
map.put(3, new Student(3, "Nilesh", 10));
//Map Sorting by Value i.e student's natural ordering i.e by name
map.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getValue))
.forEach(e -> {
Integer key = (Integer)e.getKey();
Student std = (Student)e.getValue();
System.out.println("Key: " + key +", value: ("+ std.getId() +", "+ std.getName()+", "+ std.getAge()+")");
});
}
}
输出
Key: 1, value: (1, Mahesh, 12)
Key: 3, value: (3, Nilesh, 10)
Key: 2, value: (2, Suresh, 15)
欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:
已在知识星球更新源码解析如下:
最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。
提供近 3W 行代码的 SpringBoot 示例,以及超 6W 行代码的电商微服务项目。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)