关于stream().sorted()以及java中常用的比较器排序

 更新时间:2024年05月28日 10:51:10   作者:Harbor Lau  
这篇文章主要介绍了关于stream().sorted()以及java中常用的比较器排序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1.sorted():无参数的情况下

需要对应的Bean实现Comparable 接口

package com.itheima.demo18_扩展字符串排序;

import java.util.ArrayList;
import java.util.List;public class Harbor_Stream {
    public static void main(String[] args) {
        List<Person> personList = new ArrayList<Person>();
        personList.add(new Person("Tom", 8900, 28,"male", "New York"));
        personList.add(new Person("Jack", 7000, 29,"male", "Washington"));
        personList.add(new Person("Lily", 7800, 320,"female", "Washington"));
        personList.add(new Person("Anni", 8200, 26,"female", "New York"));
        personList.add(new Person("Owen", 9500, 27,"male", "New York"));
        personList.add(new Person("Alisa", 7900, 29,"female", "New York"));
        personList.stream().sorted().forEach(s-> System.out.println(s));
    }
}

package com.itheima.demo18_扩展字符串排序;

import java.util.Objects;

public class Person implements Comparable{
    private String name; // 姓名
    private int salary; // 薪资
    private int age; // 年龄
    private String sex; //性别
    private String area; // 地区

    public String getName() {
        return name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return salary == person.salary &&
                age == person.age &&
                Objects.equals(name, person.name) &&
                Objects.equals(sex, person.sex) &&
                Objects.equals(area, person.area);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, salary, age, sex, area);
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", salary=" + salary +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", area='" + area + '\'' +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getArea() {
        return area;
    }

    public void setArea(String area) {
        this.area = area;
    }

    // 构造方法
    public Person(String name, int salary, int age,String sex,String area) {
        this.name = name;
        this.salary = salary;
        this.age = age;
        this.sex = sex;
        this.area = area;
    }


    @Override
    public int compareTo(Object o) {
        Person good = (Person) o;

            return Integer.compare( this.getAge(),good.getAge());

    }
}

2.sorted():有参数的情况下

直接按照stream流的传参格式进行传参

package com.itheima.demo18_扩展字符串排序;

import java.util.ArrayList;
import java.util.List;

public class Harbor_Stream {
    public static void main(String[] args) {
        List<Person> personList = new ArrayList<Person>();
        personList.add(new Person("Tom", 8900, 28,"male", "New York"));
        personList.add(new Person("Jack", 7000, 29,"male", "Washington"));
        personList.add(new Person("Lily", 7800, 320,"female", "Washington"));
        personList.add(new Person("Anni", 8200, 26,"female", "New York"));
        personList.add(new Person("Owen", 9500, 27,"male", "New York"));
        personList.add(new Person("Alisa", 7900, 29,"female", "New York"));
        personList.stream().sorted(((o1, o2) ->{return o1.getAge()-o2.getAge();})).forEach(s-> System.out.println(s));
    }
}

3.Collections.sort(personList, new Comparator<Person>()

package com.itheima.demo18_扩展字符串排序;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Harbor_Stream {
    public static void main(String[] args) {
        List<Person> personList = new ArrayList<Person>();
        personList.add(new Person("Tom", 8900, 28,"male", "New York"));
        personList.add(new Person("Jack", 7000, 29,"male", "Washington"));
        personList.add(new Person("Lily", 7800, 320,"female", "Washington"));
        personList.add(new Person("Anni", 8200, 26,"female", "New York"));
        personList.add(new Person("Owen", 9500, 27,"male", "New York"));
        personList.add(new Person("Alisa", 7900, 29,"female", "New York"));
       // personList.stream().sorted(((o1, o2) ->{return o1.getAge()-o2.getAge();})).forEach(s-> System.out.println(s));

        Collections.sort(personList, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge()-o2.getAge();
            }
        });
        personList.forEach(s->{
            System.out.println(s);
        });
    }
}

4.还是sort进行还需的写法

采用表达式

list.add(new Student("张三",16));
  list.add(new Student("张四",19));
  list.add(new Student("李五",16));
  list.add(new Student("张马六",16));
/*  Collections.sort(list, new Comparator<Student>() {
      @Override
      public int compare(Student o1, Student o2) {
          return o2.getName().compareTo(o1.getName());
      }
  });*/
  List<Student> collect = list.stream().sorted(Comparator.comparing(Student::getAge).reversed().thenComparing(Student::getName))
          .collect(Collectors.toList());
  System.out.println(collect);
  // System.out.println(list);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot快速入门及起步依赖解析(实例详解)

    SpringBoot快速入门及起步依赖解析(实例详解)

    SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程,这篇文章主要介绍了SpringBoot快速入门及起步依赖解析,需要的朋友可以参考下
    2022-10-10
  • Java数组(Array)最全汇总(上篇)

    Java数组(Array)最全汇总(上篇)

    这篇文章主要介绍了Java数组(Array)最全汇总(上篇),本文章内容详细,通过案例可以更好的理解数组的相关知识,本模块分为了三部分,本次为上篇,需要的朋友可以参考下
    2023-01-01
  • 微服务如何通过feign.RequestInterceptor传递参数

    微服务如何通过feign.RequestInterceptor传递参数

    这篇文章主要介绍了微服务如何通过feign.RequestInterceptor传递参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • springboot 使用Spring Boot Actuator监控应用小结

    springboot 使用Spring Boot Actuator监控应用小结

    本篇文章主要介绍了springboot 使用Spring Boot Actuator监控应用小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 基于Spring监听Binlog日志的方法详解

    基于Spring监听Binlog日志的方法详解

    MySQL 的二进制日志(binlog)有三种不同的格式,通常被称为 binlog 模式,这三种模式分别是 Statement 模式、Row 模式和Mixed 模式,本文将给大家介绍如何基于Spring监听Binlog日志,需要的朋友可以参考下
    2024-09-09
  • Java中最全最基础的IO流概述和简介案例分析

    Java中最全最基础的IO流概述和简介案例分析

    Java IO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理流(如缓冲流、对象流)增强功能,提供缓冲、序列化及编码转换,支持高效文件操作、网络通信和国际化文本处理,感兴趣的朋友跟随小编一起看看吧
    2025-09-09
  • IDEA生成项目后出现的iml和idea文件问题

    IDEA生成项目后出现的iml和idea文件问题

    这篇文章主要介绍了IDEA生成项目后出现的iml和idea文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Maven中生命周期深度解析与实战指南

    Maven中生命周期深度解析与实战指南

    这篇文章主要为大家详细介绍了Maven 生命周期实战指南,包含核心概念、阶段详解、Spring Boot 特化场景及企业级实践建议,希望对大家有一定的帮助
    2025-08-08
  • Spring关于@Scheduled限制的问题

    Spring关于@Scheduled限制的问题

    这篇文章主要介绍了Spring关于@Scheduled限制的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Springboot基础之RedisUtils工具类

    Springboot基础之RedisUtils工具类

    本文来说下RedisUtils工具类,主要介绍了整合Redis、MyBatis,封装RedisUtils工具类等知识,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05

最新评论