list 集合排序,java8新特性,学习一下

来源:互联网 发布:lol体验服刷点卷软件 编辑:程序博客网 时间:2024/05/16 11:40

最近做一个项目,遇到了list<Entity>需要按时间倒叙排列发现Java8新特性封装的比较好:

例子:

List<Entity> list = Lists.newArrayList();

list.stream().sorted(Comparator.comparing(Entity::getCreateTime).reversed()).collect(Collectors.toList());
看到一篇博客总结的比较好(拷贝一下,留作纪念):

原文链接:http://www.concretepage.com/java/jdk-8/java-8-stream-sorted-example 
国外对Java8一系列总结的不错, 翻译过来给大家共享 
这篇文章将会讲解Java 8 Stream sorted()示例, 我们能够以自然序或着用Comparator 接口定义的排序规则来排序一个流。Comparator 能用用lambada表达式来初始化, 我们还能够逆序一个已经排序的流。 
接下来我们将会使用java 8 的流式sorted排序List 、Map 、 Set 
1、sorted() 默认使用自然序排序, 其中的元素必须实现Comparable 接口 
2、sorted(Comparator<? super T> comparator) :我们可以使用lambada 来创建一个Comparator 实例。可以按照升序或着降序来排序元素。 
下面代码以自然序排序一个list

list.stream().sorted() 
  • 1

自然序逆序元素,使用Comparator 提供的reverseOrder() 方法

list.stream().sorted(Comparator.reverseOrder()) 
  • 1

使用Comparator 来排序一个list

list.stream().sorted(Comparator.comparing(Student::getAge)) 
  • 1

把上面的元素逆序

list.stream().sorted(Comparator.comparing(Student::getAge).reversed()) 
  • 1

Stream sorted() with List

我们排序一组装着Student 类对象的List 集合。 首先我们使用自然序, 接着我们使用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<Student> list = new ArrayList<Student>();        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<Student> 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()));    }} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

* Student.java *

package com.concretepage;public class Student implements Comparable<Student> {    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;        }   } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

* Output *

---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 with reverse order---Id:2, Name: Suresh, Age:15Id:1, Name: Mahesh, Age:12Id:3, Name: Nilesh, Age:10 

原创粉丝点击