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

到此这篇关于Java8排序stream.sorted()的使用的文章就介绍到这了,更多相关Java8 stream.sorted()内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java8 stream多字段排序的实现

    很多情况下sql不好解决的多表查询,临时表分组,排序,尽量用java8新特性stream进行处理 使用java8新特性,下面先来点基础的 List<类> list; 代表某集合 //返回 对象集合以类属性一升序排序 list.stream().sorted(Comparator.comparing(类::属性一)); //返回 对象集合以类属性一降序排序 注意两种写法 list.stream().sorted(Comparator.comparing(类::属性一).reversed());/

  • Layui前后台交互数据获取java实例

    Layui简介 Layui是一款适用于后台程序员的UI框架,学习成本低.Json数据格式交互前后台,并且也相当适用单页面开发.有兴趣的朋友可以看看layui官网. Layui前后台数据交互 layui有自己的一套特定的数据格式交互(这很重要),必须参数code:0,msg:"",count:数据size(int),data:"数据List".一般我们选择封装返回接收类. Layui前台js请求数据 其中 html代码 <link rel="style

  • Java 改造ayui表格组件实现多重排序

    实现思路也比较简单,只需要用一个数组来存放所有排序的列,再把这个数组传到后端(后端排序)进行排序即可.沿用一般的使用习惯,按住 shift 键点击表头可增加排序列,按住 ctrl 键点击表头可减少排序列.话不多说,先上最终效果图: 1. 定义排序列数组 我当前用的是 2.5.6 版本,源码之前为适应业务需求也做过相应修改,所以下文说到的行数只是个大概数. 为兼容之前单列排序的使用习惯,我们增加一个 multiSort 的配置属性,默认为 false,为 true 时才开启多列排序.修改源码大概第

  • Java使用DualPivotQuicksort排序

    Java排序 - DualPivotQuicksort 这里描述 leftmost = true 的情况,也就是会从数组的开始一直排序到数组的结尾. 数组类型:int[].long[].short[].char[].float[].double[],还有比较特殊的 byte[] 1. 插入排序(insertion sort) 适合长度短的数组排序,对于byte[] 长度小于等于30 和 其它数组长度小于47 的情况,会使用这种排序 代码以 int[] a 为例: // 第一次循环i=j=0,之后

  • java8 stream的多字段排序实现(踩坑)

    关于java8 的stream排序用法这里不做多说,这里介绍下曾经在多字段排序时遇到过的一个坑. 需求:需要根据id去分组,然后取出每组中行号最大的一个对象值. 想到可以利用stream的多字段排序,先按id去排,再看行号去排,demo代码如下: class Tt{ private int id; private int line; public Tt(int id, int line) { this.id = id; this.line = line; } public int getId()

  • Java Swing中的表格(JTable)和树(JTree)组件使用实例

    一:表格(JTable): 1.基本概念: 表格(JTable)是Swing 新增加的组件,主要是为了将数据以表格的形式显示.给显示大块数据提供了简单的机制. 2.常用构造方法: * JTable():使用系统默认的模型创建一个JTable 实例.  * JTable(int numRows,int numColumns):创建一个使用DefaultTableModel 指定行.列的空表格.  * JTable(Object[ ][ ] rowData,Object[ ][ ] columnNa

  • Java Swing组件编程之JTable表格用法实例详解

    本文实例讲述了Java Swing组件编程之JTable表格用法.分享给大家供大家参考,具体如下: 表格是GUI编程中使用较多,但也是最麻烦的一个控件之一.表格是用来显示二维数据,提供编辑,选择等功能.如果只是显示数据,这还是非常easy的,只要在JTable中传入二维数组或集合就可以了. 示例1: package awtDemo; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTab

  • Java多种经典排序算法(含动态图)

    算法分析 一个排序算法的好坏,一般是通过下面几个关键信息来分析的,下面先介绍一下这几个关键信息,然后再将常见的排序算法的这些关键信息统计出来. 名词介绍 时间复杂度:指对数据操作的次数(或是简单的理解为某段代码的执行次数).举例:O(1):常数时间复杂度:O(log n):对数时间复杂度:O(n):线性时间复杂度. 空间复杂度:某段代码每次执行时需要开辟的内存大小. 内部排序:不依赖外部的空间,直接在数据内部进行排序: 外部排序:数据的排序,不能通过内部空间来完成,需要依赖外部空间. 稳定排序:

  • Java8排序stream.sorted()的使用

    在这个页面上我们将提供java 8 Stream sorted()示例.我们可以按照自然排序以及Comparator提供的排序对流进行排序.在java 8中Comparator可以使用lambda表达式进行实例化.我们还可以反转自然排序以及提供的排序Comparator.自然排序使用提供的顺序Comparable,必须由其实例是流元素的类实现.在这个页面上我们将排序List,Map并Set使用java 8流sorted()方法. 1.sorted()方法的语法示例. 1.1sorted():它使

  • Java8 使用 stream().sorted()对List集合进行排序的操作

    1.声明一个测试对象 import java.time.LocalDate; import java.util.List; import lombok.Data; @Data public class StudentInfo{ //名称 private String name; //性别 true男 false女 private Boolean gender; //年龄 private Integer age; //身高 private Double height; //出生日期 private

  • java8 使用stream排序空字段排在前面或后面

    java8 stream排序空字段排在前面或后面 直接粗暴sorted会NPE,这种写法可以避免 list.stream().sorted(Comparator.comparing(l -> l.getCreateTime(), Comparator.nullsFirst(Date::compareTo))).collect(toList()); toOrderList.stream().sorted(Comparator.comparing(l -> l.getContractCode(),

  • 利用stream sorted进行降序排序

    根据value值的大小进行降序排序,并进行截取. public static void main(String[] args) { List<Map<String, Object>> list = Lists.newArrayList(); Map<String, Object> map = Maps.newHashMap(); map.put("id", 1); map.put("value", 20); list.add(ma

  • Java8 实现stream将对象集合list中抽取属性集合转化为map或list

    首先新建一个实体类Person @Data public class Person { /** 编码 */ private String code; /** 名字 */ private String name; public Person(String code, String name) { this.code = code; this.name = name; } } 实例化三个对象放入list集合中 public static void main(String[] args) { Pers

  • 关于JAVA8的 Stream学习

    目录 一.Stream的使用 1.1 创建 1.2 步骤 二.Stream的特性 三.中间操作 3.1 filter() 3.2 limit() 3.3 skip() 3.4 map() 3.5 sorted 四.终止操作 4.1 allMatch 4.2anyMatch 4.3noneMatch 4.4 findFirst() 4.5 findAny() 4.6 count 4.7 max 4.8 min 4.9 forEach 4.10 reduce 4.11 collect 一.Strea

  • Java8中Stream的一些神操作

    Java8对集合提供了一种流式计算的方式,这种风格将要处理的元素集合看 作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如 筛选, 排序,聚合等. Stream API 基本都是返回Stream本身,这样多个操作可以串联成一个管 道, 如同流式风格(fluent style). 这样做可以对操作进行优化, 比 如延迟执行(laziness)和短路( short-circuiting) stream() 为集合创建串行流 parallelStream() 为集合创建并行流 pri

  • Java8中Stream流式操作指南之入门篇

    目录 简介 正文 1. 流是什么 2. 老板,上栗子 3. 流的操作步骤 4. 流的特点 5. 流式操作和集合操作的区别: 总结 简介 流式操作也叫做函数式操作,是Java8新出的功能 流式操作主要用来处理数据(比如集合),就像泛型也大多用在集合中一样(看来集合这个小东西还是很关键的啊,哪哪都有它) 下面我们主要用例子来介绍下,流的基操(建议先看下lambda表达式篇,里面介绍的lambda表达式.函数式接口.方法引用等,下面会用到) 正文 1. 流是什么 流是一种以声明性的方式来处理数据的AP

  • Java8中Stream的使用方式

    目录 前言: 1. 为什么有经验的老手更倾向于使用Stream 2. Stream 的使用方式 3. Stream 的创建 4. Stream 中间操作 5. Stream 终止操作 6. Stream 特性 前言: 相信有很多刚刚入坑程序员的小伙伴被一些代码搞的很头疼,这些代码让我们既感觉到很熟悉,又很陌生的感觉.我们很多刚入行的朋友更习惯于使用for循环或是迭代器去解决一些遍历的问题,但公司里很多老油子喜欢使用Java8新特性Stream流去做,这样可以用更短的代码实现需求,但是对于不熟悉的

  • Java8中Stream的详细使用方法大全

    目录 一.概述 1.使用流的好处 2.流是什么? 二.分类 三.Stream的创建 1.通过 java.util.Collection.stream() 方法用集合创建流 2.使用 java.util.Arrays.stream(T[]array)方法用数组创建流 3.使用 Stream的静态方法:of().iterate().generate() 四.Stream API简介 1.遍历/匹配(foreach/find/match) 2.按条件匹配filter 3.聚合max.min.count

随机推荐