Java8排序stream.sorted()的使用
在这个页面上我们将提供java 8 Stream sorted()示例。我们可以按照自然排序以及Comparator提供的排序对流进行排序。在java 8中Comparator可以使用lambda表达式进行实例化。我们还可以反转自然排序以及提供的排序Comparator。自然排序使用提供的顺序Comparable,必须由其实例是流元素的类实现。在这个页面上我们将排序List,Map并Set使用java 8流sorted()方法。
1.sorted()方法的语法示例。
1.1sorted():它使用自然顺序对流的元素进行排序。元素类必须实现Comparable接口。
按自然升序对集合进行排序
list.stream().sorted() .stream().sorted();
自然序降序使用Comparator提供reverseOrder()方法
list.stream().sorted(Comparator.reverseOrder()) .stream().sorted(Comparator.reverseOrder());
1.2 sorted(Comparator<? super T> comparator):这里我们创建一个Comparator使用lambda表达式的实例。我们可以按升序和降序对流元素进行排序。
使用Comparator来对列表进行自定义升序。
list.stream().sorted(Comparator.comparing(Student::getAge)) .stream().sorted(Comparator.comparing(Student::getAge));
使用Comparator提供reversed()方法来对列表进行自定义降序。 。
list.stream().sorted(Comparator.comparing(Student::getAge).reversed()) .stream().sorted(Comparator.comparing(Student::getAge).reversed());
2.使用List流排序()
package com.stream.demo; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; public class StreamListDemo { public static void main(String[] args) { List<Student> 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<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())); } }
package com.stream.demo; 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; } }
执行结果
---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
3.使用set流排序
package com.stream.demo; import java.util.Comparator; import java.util.HashSet; import java.util.Set; public class StreamSetDemo { public static void main(String[] args) { Set<Student> 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---"); 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())); } }
4.使用Map流排序
package com.stream.demo; import java.util.Comparator; import java.util.HashMap; import java.util.Map; public class StreamMapDemo { public static void main(String[] args) { Map<Integer, String> 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---");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())); } }
这是在英文网站看到的示例,觉得还不错就翻译过来了。
原文链接:http://www.concretepage.com/java/jdk-8/java-8-stream-sorted-example
上一篇:SpringBoot单元测试使用@Test没有run方法的解决方案
栏 目:JAVA代码
下一篇:关于json序列化(javaBean转Json的细节处理)
本文标题:Java8排序stream.sorted()的使用
本文地址:http://www.codeinn.net/misctech/221627.html