1.sorted作用
返回由此流的元素组成的流,按照自然顺序排序。简单的来说就是排序,可以自定义排序方法,也可以使用Comparator的compring方法按指定的数据排序。
2.sorted使用
2.1自然排序
List<Integer> list2 = new ArrayList<Integer>();
list2.add(15);
list2.add(10);
list2.add(5);
Object[] object = list2.stream().sorted().toArray();
for (Object p:object) {
System.out.println(p);
}
结果:
2.2自然排序的倒序
//按照年龄排序的倒序
List<Person> list = new ArrayList<Person>();
list.add(new Person(21,"张三"));
list.add(new Person(14,"王二"));
list.add(new Person(28,"李四"));
list.add(new Person(11,"王路飞"));
Object[] object = list.stream().sorted(Comparator.comparing(Person::getAge).reversed()).toArray();
for (Object p:object) {
System.out.println(p);
}
结果
2.3多次排序
先年龄排序,再按姓名(都是升序)
Object[] object = list.stream().sorted(Comparator.comparing(Person::getAge).thenComparing(Person::getName)).toArray();
结果
先按年龄降序,再按姓名升序
Object[] object = list.stream().sorted(Comparator.comparing(Person::getAge).reversed().thenComparing(Person::getName)).toArray();
for (Object p:object) {
System.out.println(p);
}
结果
2.4自定义排序(用到lamda表达式)
年龄升序
Object[] object = list.stream().sorted((o1, o2) -> {
int o1Age = o1.getAge();
int o2Age = o2.getAge();
return o1Age-o2Age;
}).toArray();
结果
3.排序后只想要姓名
排序完成后利用stream的map()方法
Object[] object = list.stream().sorted((o1, o2) -> {
int o1Age = o1.getAge();
int o2Age = o2.getAge();
return o1Age-o2Age;
}).map(Person::getName).toArray();
for (Object p:object) {
System.out.println(p);
}
结果
4.排序后转集合
以上方法全部转换成的数组
转换集合:
List<Person> list1 = list.stream().sorted((o1, o2) -> {
int o1Age = o1.getAge();
int o2Age = o2.getAge();
return o1Age-o2Age;
}).collect(Collectors.toList());
System.out.println(list1);
结果:
转换成集合的话,若想使用map匹配想要的数据,那么List<>里的泛型要和匹配后的数据类型一致,例如我想要姓名,那么泛型里传String,当然也可以省略不写泛型,可以接受任何类型的数据