Java8 中 Comparator 接口提供了一些静态方法,可以方便于我们进行排序操作,下面通过例子讲解下如何使用

  • 对整数列表排序(升序)

    List<Integer> list = Arrays.asList(1, 4, 2, 6, 2, 8);
    list.sort(Comparator.naturalOrder());
    System.out.println(list);
  • 对整数列表排序(降序)

    List<Integer> list = Arrays.asList(1, 4, 2, 6, 2, 8);
    list.sort(Comparator.reverseOrder());
    System.out.println(list);
  • 根据对象属性(年龄)进行排序
    public class Test {
    public static void main(String[] args) {
    List<Person> personList = new ArrayList<>();
    personList.add(new Person("a", 2));
    personList.add(new Person("b", 4));
    personList.add(new Person("c", 7));
    // 升序
    personList.sort(Comparator.comparingInt(Person::getAge));
    // 降序
    personList.sort(Comparator.comparingInt(Person::getAge).reversed());
    System.out.println(personList);
    } public static class Person {
    private String name;
    private Integer age; public Person(String name, Integer age) {
    this.name = name;
    this.age = age;
    } public Integer getAge() {
    return age;
    } // ... toString 方法
    }
    }
  • 根据对象属性(价格、速度)进行排序,需要注意的是,排序有先后之分,不同的顺序会导致不同的结果
    public class Test {
    public static void main(String[] args) {
    List<Computer> list = new ArrayList<>();
    list.add(new Computer("xiaomi",4000,6));
    list.add(new Computer("sony",5000,4));
    list.add(new Computer("dell",4000,5));
    list.add(new Computer("mac",6000,8));
    list.add(new Computer("micro",5000,6));
    // 先以价格(升序)、后再速度(升序)
    list.sort(Comparator.comparingInt(Computer::getPrice).thenComparingInt(Computer::getSpeed));
    // 先以速度(降序)、后再价格(升序)
    list.sort(Comparator.comparingInt(Computer::getSpeed).reversed().thenComparingInt(Computer::getPrice));
    // 先以价格(降序)、后再速度(降序)
    list.sort(Comparator.comparingInt(Computer::getPrice).thenComparingInt(Computer::getSpeed).reversed());
    System.out.println(list);
    } public static class Computer {
    private String name;
    private Integer price;
    private Integer speed; public Computer(String name, Integer price, Integer speed) {
    this.name = name;
    this.price = price;
    this.speed = speed;
    } public Integer getPrice() { return price;
    } public void setPrice(Integer price) {
    this.price = price;
    } public Integer getSpeed() {
    return speed;
    } public void setSpeed(Integer speed) {
    this.speed = speed;
    } // ... toString 方法
    }
    }

Java8 Comparator 排序方法的更多相关文章

  1. JAVA8 List排序

    先定义一个实体类 @Data @AllArgsConstructor @NoArgsConstructor public class Human { private String name; priv ...

  2. List排序方法

    可用使用Collections.sort(List<T> list)和Collections.sort(List<T> list, Comparator<? super ...

  3. java8学习之方法引用详解及默认方法分析

    方法引用: 之前花了很多时间对Lambda表达式进行了深入的学习,接下来开启新的主题---方法引用(Method References),其实在之前的学习中已经使用过了,如: 那方法引用跟Lambda ...

  4. java提供的默认list排序方法-转

    1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list. ...

  5. Java ArrayList排序方法详解

    由于其功能性和灵活性,ArrayList是 Java 集合框架中使用最为普遍的集合类之一.ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在 ...

  6. 几种list排序方法

    package com.lgx.jdk8.part02; import java.util.*; import java.util.stream.Collectors; /** * Comparato ...

  7. Java ArrayList的不同排序方法

    本文由 ImportNew - 温布利往事 翻译自 dzone.欢迎加入翻译小组.转载请见文末要求. 由于其功能性和灵活性,ArrayList是 Java 集合框架中使用最为普遍的集合类之一.Arra ...

  8. ch1_6_1求解两种排序方法问题

    考拉有n个字符串字符串,任意两个字符串长度都是不同的.  考拉最近学习到有两种字符串的排序方法:   1.根据字符串的字典序排序.例如: "car" < "carr ...

  9. JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)

    1.使用对象字面量定义对象 var person={}; 使用这种方式创建对象时,实际上不会调用Object构造函数. 开发人员更喜欢对象字面量的语法.   2.有时候需要传递大量可选参数的情形时,一 ...

随机推荐

  1. python接口自动化4-绕过验证码登录(cookie) (转载)

    前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 一.抓登录coo ...

  2. gulp 前端构建工具入门

    gulp 前端构建工具入门 标签(空格分隔): gulp 1. 安装gulp npm i -g gulp 2. 创建gulp项目 2.1 Hello world 使用npm init初始化项目文件夹. ...

  3. 网络分析 ANP

    在许多实际问题中,各层次内部元素往往是依赖的. 低层元素对高层元素亦有支配作用,即存在反馈. 此时系统的结构更类似于网络结构.网络分析法正是适应这种需要,由AHP延伸发展得到的系统决策方法.   AN ...

  4. OC基础数据类型-NSString

    1.字符串的初始化 //字符串的初始化 NSString *str = @"Hello world!"; NSString *str2 = [[NSString alloc] in ...

  5. 如何制作EDM邮件营销模板之图片注意事项

    在制作EDM邮件营销的邮件模板的时候我们总喜欢添加一些图片来提高读者阅读兴趣,现在U-Mail邮件群发平台根据已有的一些经验来分享给一下邮件内容中添加图片要注意的问题: 1.尽量少使用图片,特别是重要 ...

  6. web服务器、app(应用)服务器、DB后端性能瓶颈和分析

    性能测试day07_性能瓶颈和分析 https://www.cnblogs.com/leixiaobai/p/9463748.html 其实如果之前都做的很到位的话,那么再加上APM工具(dynaTr ...

  7. bzoj5152 [Wc2018]通道

    题目链接 正解:不会做. 写一个爬山算法就过官方数据了(逃 具体来说就是每次随机一个根,然后迭代找最长路的那个点. 多随机几次取$max$就行了.正解以后再补.. #include <bits/ ...

  8. Django测试

    创建一个测试 ## app/tests.py import datetime from django.utils import timezone from django.test import Tes ...

  9. Mycat数据库中间件对Mysql读写分离和分库分表配置

    Mycat是一个开源的分布式数据库系统,不同于oracle和mysql,Mycat并没有存储引擎,但是Mycat实现了mysql协议,前段用户可以把它当做一个Proxy.其核心功能是分表分库,即将一个 ...

  10. php 日志扩展

    今天发现一个比较好的php应用日志扩展,这里先mark一下,回头有空再详细介绍: http://neeke.github.io/SeasLog/