优雅的使用Stream sorted()
Stream sorted()
概述:Java8的Stream使用的是函数式编程模式,如同它的名字一样,它可以被用来对集合或数组进行链状流式的操作。可以更方便的让我们对集合或数组操作。 当我们在操作流的时候,时常需要进行排序操作,这个时候就不得不用的Stream sorted()
示例:
创建实体类:
import lombok.Data; @Data public class Person { private String name; private Integer age; private String email; public Person(String name, Integer age, String email) { this.name = name; this.age = age; this.email = email; } }
数据模拟:
public static List<Person> getPerson(){ ArrayList<Person> personList = new ArrayList<>(); Person person = new Person("张三",16,"zhangsan@gmail.com"); Person person1 = new Person("李四",18,"lisi@gmail.com"); Person person2 = new Person("王五",14,"wangwu@gmail.com"); Person person3 = new Person("赵六",25,"zhaoliu@gmail.com"); personList.add(person); personList.add(person1); personList.add(person2); personList.add(person3); return personList; }
需求1:将集合中的数据按照年龄进行升序排序
实现1:
public static void main(String[] args) { List<Person> person = getPerson(); person.stream() .sorted(new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { return o1.getAge() - o2.getAge(); } }) .forEach(System.out::println); }
结果如图: 可以看出,这里是在Stream.sorted() 里面创建了匿名内部类重写方法定义了排序规则,当然这里这可以使用lambda表达式,看起来更加优雅 实现1的lambda表达式
public static void main(String[] args) { List<Person> person = getPerson(); person.stream() .sorted((o1, o2) -> o1.getAge() - o2.getAge()) .forEach(System.out::println); }
需求2: 将集合中的数据按照年龄进行升序排序
实现2:
public static void main(String[] args) { List<Person> person = getPerson(); person.stream() .sorted((o1, o2) -> o2.getAge() - o1.getAge()) .forEach(System.out::println); }
结果如图: 可以看到,只需要将排序规则进行修改一下可以实现需求了,可以看到这样已经很优雅的完成了排序。但是,接下来还有比它更优雅的实现方式
实现3:
//实现需求1 public static void main(String[] args) { List<Person> person = getPerson(); person.stream() .sorted(Comparator.comparing(Person::getAge)) .forEach(System.out::println); }
结果如图
实现4:
public static void main(String[] args) { List<Person> person = getPerson(); person.stream() .sorted(Comparator.comparing(Person::getAge).reversed()) .forEach(System.out::println); }
结果如图 在Stream sorted() 中使用方法引用指定按照实体类的某个属性进行排序,默认的排序规则是升序,如果需要降序,调用 reversed() 进行反转即可实现降序需求! 优雅的实现排序需求,就是这么的简单!!!
下一篇:
java获取当前时间戳的方法(*)