我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java中使用Lambda表达式对集合排序

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java中使用Lambda表达式对集合排序

文章目录

一.利用lambda对list集合排序

先定义一个集合

List<Integer> list = new ArrayList<>();list.add(1);list.add(5);list.add(4);list.add(3);list.add(7);

1.升序排序

list.sort((a,b)->a.compareTo(b));

list.sort(Comparator.comparing(a->a));

list.sort((a,b)->a-b);

// 2、匿名内部类list.sort(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o1-o2;}});

2.降序排序

list.sort((a,b)->b-a);

匿名内部类方法

 list.sort(new Comparator<Integer>() {      @Override       public int compare(Integer o1, Integer o2) {              return o2-o1;       } });

对对象集合操作,其实与基本类型集合操作类似

List<User> list1 = new ArrayList<User>();User user = new User("张三", "15", "男");User user1 = new User("李四", "10", "男");list1.add(user);list1.add(user1);//1、年龄升序list1.sort((a,b) -> a.getAge().compareTo(b.getAge()));//2、姓名降序排列list1.sort(Comparator.comparing(User::getName).reversed());//等价于 2list1.sort(Comparator.comparing(a->((User)a).getAge()).reversed());//3、先按性别排,如果年龄相同,再按年龄排序list1.sort(Comparator.comparing(User::getSex).reversed().thenComparing(User::getAge));

对 JSONArray 排序

定义一个json数组 resultArray

JSONArray resultArray = new JSONArray();JSONObject result = new JSONObject();result.put("name","张三");result.put("age","15");result.put("data","201812130451");resultArray.add(result);//根据姓名的倒序排序resultArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getString("name")).reversed());//根据时间倒序排序resultArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getData("data")).reversed());//根据年龄升序排序resultArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getInteger("age")));

注意:reversed()函数的意思是将数组颠倒。其用法常见于字符串处理中,将字符串颠倒
如:

String str = "abcd";StringBuffer sb = new StringBuffer(str);sb.reverse();System.out.println(str);System.out.println(sb.toString());---------------------------------------输出abcddcba

二.java8-Lambda中比较器Comparator的使用

典型的比较器示例

Comparator<Developer> byName = new Comparator<Developer>() {    @Override    public int compare(Developer o1, Developer o2) {        return o1.getName().compareTo(o2.getName());    }};

等价的Lambda的方式

Comparator<Developer> byName = (Developer o1, Developer o2)->o1.getName().compareTo(o2.getName());

不使用Lambda的排序

假如我们要通过Developer 对象的年龄进行排序,通常情况下我们使用Collections.sort,new个匿名Comparator 类,类似下面这种:

import java.math.BigDecimal;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class TestSorting {    public static void main(String[] args) {        List<Developer> listDevs = getDevelopers();        System.out.println("Before Sort");        for (Developer developer : listDevs) {            System.out.println(developer);        }        //sort by age        Collections.sort(listDevs, new Comparator<Developer>() {            @Override            public int compare(Developer o1, Developer o2) {                return o1.getAge() - o2.getAge();            }        });        System.out.println("After Sort");        for (Developer developer : listDevs) {            System.out.println(developer);        }    }    private static List<Developer> getDevelopers() {        List<Developer> result = new ArrayList<Developer>();        result.add(new Developer("ricky", new BigDecimal("70000"), 33));        result.add(new Developer("alvin", new BigDecimal("80000"), 20));        result.add(new Developer("jason", new BigDecimal("100000"), 10));        result.add(new Developer("iris", new BigDecimal("170000"), 55));        return result;    }}-----------------------------------------------------------------------------------------------------输出结果:Before SortDeveloper [name=ricky, salary=70000, age=33]Developer [name=alvin, salary=80000, age=20]Developer [name=jason, salary=100000, age=10]Developer [name=iris, salary=170000, age=55]After SortDeveloper [name=jason, salary=100000, age=10]Developer [name=alvin, salary=80000, age=20]Developer [name=ricky, salary=70000, age=33]Developer [name=iris, salary=170000, age=55]

当比较规则发生变化时,你需要再次new个匿名Comparator 类:

    //sort by age    Collections.sort(listDevs, new Comparator<Developer>() {        @Override        public int compare(Developer o1, Developer o2) {            return o1.getAge() - o2.getAge();        }    });    //sort by name    Collections.sort(listDevs, new Comparator<Developer>() {        @Override        public int compare(Developer o1, Developer o2) {            return o1.getName().compareTo(o2.getName());        }    });    //sort by salary    Collections.sort(listDevs, new Comparator<Developer>() {        @Override        public int compare(Developer o1, Developer o2) {            return o1.getSalary().compareTo(o2.getSalary());        }    });

这样也可以,不过你会不会觉得这样有点怪,因为其实不同的只有一行代码而已,但是却需要重复写很多代码?

通过Lambda进行排序

在java8中,List接口直接提供了排序方法, 所以你不需要使用Collections.sort

    //List.sort() since Java 8    listDevs.sort(new Comparator<Developer>() {        @Override        public int compare(Developer o1, Developer o2) {            return o2.getAge() - o1.getAge();        }    });

Lambda 示例

import java.math.BigDecimal;import java.util.ArrayList;import java.util.List;public class TestSorting {    public static void main(String[] args) {        List<Developer> listDevs = getDevelopers();        System.out.println("Before Sort");        for (Developer developer : listDevs) {            System.out.println(developer);        }        System.out.println("After Sort");        //lambda here!        listDevs.sort((Developer o1, Developer o2)->o1.getAge()-o2.getAge());        //java 8 only, lambda also, to print the List        listDevs.forEach((developer)->System.out.println(developer));    }    private static List<Developer> getDevelopers() {        List<Developer> result = new ArrayList<Developer>();        result.add(new Developer("ricky", new BigDecimal("70000"), 33));        result.add(new Developer("alvin", new BigDecimal("80000"), 20));        result.add(new Developer("jason", new BigDecimal("100000"), 10));        result.add(new Developer("iris", new BigDecimal("170000"), 55));        return result;    }}------------------------------------------------------------------------输出结果:Before SortDeveloper [name=ricky, salary=70000, age=33]Developer [name=alvin, salary=80000, age=20]Developer [name=jason, salary=100000, age=10]Developer [name=iris, salary=170000, age=55]After SortDeveloper [name=jason, salary=100000, age=10]Developer [name=alvin, salary=80000, age=20]Developer [name=ricky, salary=70000, age=33]Developer [name=iris, salary=170000, age=55]

更多的Lambda例子

根据年龄

    //sort by age    Collections.sort(listDevs, new Comparator<Developer>() {        @Override        public int compare(Developer o1, Developer o2) {            return o1.getAge() - o2.getAge();        }    });    //lambda    listDevs.sort((Developer o1, Developer o2)->o1.getAge()-o2.getAge());    //lambda, valid, parameter type is optional    listDevs.sort((o1, o2)->o1.getAge()-o2.getAge());

根据名字

    //sort by name    Collections.sort(listDevs, new Comparator<Developer>() {        @Override        public int compare(Developer o1, Developer o2) {            return o1.getName().compareTo(o2.getName());        }    });    //lambda    listDevs.sort((Developer o1, Developer o2)->o1.getName().compareTo(o2.getName()));    //lambda    listDevs.sort((o1, o2)->o1.getName().compareTo(o2.getName()));

根据薪水

    //sort by salary    Collections.sort(listDevs, new Comparator<Developer>() {        @Override        public int compare(Developer o1, Developer o2) {            return o1.getSalary().compareTo(o2.getSalary());        }    });    //lambda    listDevs.sort((Developer o1, Developer o2)->o1.getSalary().compareTo(o2.getSalary()));    //lambda    listDevs.sort((o1, o2)->o1.getSalary().compareTo(o2.getSalary()))

倒序
正常排序

Comparator<Developer> salaryComparator = (o1, o2)->o1.getSalary().compareTo(o2.getSalary());listDevs.sort(salaryComparator);

倒序

Comparator<Developer> salaryComparator = (o1, o2)->o1.getSalary().compareTo(o2.getSalary());listDevs.sort(salaryComparator.reversed());

参考文章侵删:
java 使用Lambda对集合排序
java8-Lambda中比较器Comparator的使用

来源地址:https://blog.csdn.net/mfysss/article/details/131208592

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java中使用Lambda表达式对集合排序

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java使用lambda表达式对List对象集合的某个属性进行排序

这里新建一个UserInfo对象,用来测试lambda表达式排序,属性如下:public class UserInfo { private int id; private int age; private String name; pu
java使用lambda表达式对List对象集合的某个属性进行排序
2021-07-02

如何在Java中使用Lambda表达式简化集合遍历?(Java中如何利用Lambda表达式简化集合的遍历操作?)

JavaLambda表达式简化集合遍历:forEach():对每个元素执行操作。stream():创建流进行高级操作。map():通过转换每个元素创建新集合。filter():根据条件过滤元素。reduce():将元素聚合为单个值。组合Lambda表达式:创建复杂遍历操作。好处:简化、可读、可维护的代码提高大型集合处理的性能
如何在Java中使用Lambda表达式简化集合遍历?(Java中如何利用Lambda表达式简化集合的遍历操作?)
2024-04-02

Java如何使用 Lambda 表达式实现超强的排序功能

这篇文章主要介绍Java如何使用 Lambda 表达式实现超强的排序功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先,我们定义一个基础类,后面我们将根据这个基础类演示如何在内存中排序。@Data@NoArgsC
2023-06-25

Java中Lambda表达式基础及使用

目录一、举例说明1、无参无返回1.1 定义一个接口1.2接口实现类1.3 测试类2、有参无返回代码示例3、有参有返回二、简单事项1、省略模式2、注意事项三、Lambda表达式和匿名内部类的区别1、所需类型不同:2、使用限制不同:3、实现原理不同:标准格式:三要
2019-12-07

Java中Lambda表达式使用及详解

Java中Lambda表达式使用及详解 前言 一、Lambda表达式的简介 Lambda表达式(闭包):java8的新特性,lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中。使用lambda表达式可以让代码更加
2023-08-16

lambda表达式如何在java中使用

这篇文章给大家介绍lambda表达式如何在java中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Lamda表达式λ 希腊字母表中排序第十一位字母,英语名称为Lambda避免匿名内部类定义过多其实质属于函数式 编程
2023-06-14

java lambda表达式怎么使用

Java lambda表达式是Java 8引入的一种新特性,它可以简化代码的编写,尤其是在处理函数式接口时非常方便。下面是使用lambda表达式的一些常用方法:1. 使用匿名内部类的方式创建函数式接口的实例:```MyInterface m
2023-09-23

Java Lambda表达式怎么使用

这篇文章主要介绍“Java Lambda表达式怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java Lambda表达式怎么使用”文章能帮助大家解决问题。一、背景Lambda表达式是Java
2023-06-29

Java中Lambda表达式怎么用

这篇文章主要介绍了Java中Lambda表达式怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言Lambda表达式是java 8中包含的重要功能之一。Lambda表
2023-06-15

Java中Lambda表达式使用详细解读

这篇文章主要介绍了Java中Lambda表达式使用及详解,lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中,使用lambda表达式可以让代码更加简洁,需要的朋友可以参考下
2023-05-18

Java的Lambda表达式如何使用

这篇文章主要介绍“Java的Lambda表达式如何使用”,在日常操作中,相信很多人在Java的Lambda表达式如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的Lambda表达式如何使用”的疑
2023-06-30

Java中Lambda表达式有什么用

小编给大家分享一下Java中Lambda表达式有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Lambda表达式:1、简介首先Lambda表达式是属于Jav
2023-06-29

如何在Java项目中使用lambda表达式

这期内容当中小编将会给大家带来有关如何在Java项目中使用lambda表达式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java8引入了lambda表达式。lambda表达式并不是新功能,只是为了方便代
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录