三、Stream的排序
Stream通道流支持两种排除方式:sorted()自然排序;sorted(Comparator comp)。
sorted()自然排序 :产生一个新流,流中每个序列按自然排序的方式进行排序。
sorted(Comparator comp) :产生一个新流,流中的每个序列按自定义的比较器排序进行排序。
1、 sorted()自然排序
@Test
public void test1(){
List<String> list = Arrays.asList("aaa", "bbb", "ccc");
Stream<String> stream = list.stream()
.sorted(); //把流中的每个序列进行自然排序
stream.forEach(System.out::println);
}
运行方法,输出结果如下
aaa
bbb
ccc
2、sorted(Comparator comp)定制排序
首先按用户的年龄进行比较,如果年龄相等,则按照用户的姓名进行比较。
@Test
public void test2(){
List<User> users = Arrays.asList(
new User("lzj", 28),
new User("zhangsan", 30),
new User("lisi", 28),
new User("wanger", 28));
Stream<User> stream = users.stream()
.sorted((x, y) -> { //使流中的序列两两进行比较
if (x.getAge() == y.getAge()) {
return x.getName().compareTo(y.getName());
}else{
return x.getAge() > y.getAge() ? 1 : -1;
}
});
stream.forEach(System.out::println);
}
Sorted方法接受一个Comparator类型的参数,实例用Lambda表达式进行实现了该接口,重写的该接口中的compare方法。
运行方法,输出结果如下:
User [name=lisi, age=28]
User [name=lzj, age=28]
User [name=wanger, age=28]
User [name=zhangsan, age=30]