广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java中使用Lambda表达式对集合排序
  • 147
分享到

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

java开发语言 2023-09-11 13:09:22 147人浏览 八月长安
摘要

文章目录 一.利用lambda对list集合排序1.升序排序2.降序排序对对象集合操作,其实与基本类型集合操作类似对 JSONArray 排序 二.java8-Lambda中比较器Comp

文章目录

一.利用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

--结束END--

本文标题: Java中使用Lambda表达式对集合排序

本文链接: https://www.lsjlt.com/news/403124.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Java中使用Lambda表达式对集合排序
    文章目录 一.利用lambda对list集合排序1.升序排序2.降序排序对对象集合操作,其实与基本类型集合操作类似对 JSONArray 排序 二.java8-Lambda中比较器Comp...
    99+
    2023-09-11
    java 开发语言
  • java使用lambda表达式对List对象集合的某个属性进行排序
    这里新建一个UserInfo对象,用来测试lambda表达式排序,属性如下:public class UserInfo { private int id; private int age; private Strin...
    99+
    2021-07-02
    java lambda List 对象集合 属性 排序
  • Java中forEach使用lambda表达式,数组和集合的区别说明
    1.数组怎么使用lambda 数组不能直接在forEach中使用lambda表达式 PartnerType[] values = PartnerType.values(); //...
    99+
    2022-11-12
  • Java 进阶使用 Lambda 表达式实现超强的排序功能
    目录基于Comparator排序使用 Lambda 表达式替换Comparator匿名内部类通过静态方法抽取公共的 Lambda 表达式借助Comparator的comparing方...
    99+
    2022-11-12
  • Java如何使用 Lambda 表达式实现超强的排序功能
    这篇文章主要介绍Java如何使用 Lambda 表达式实现超强的排序功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先,我们定义一个基础类,后面我们将根据这个基础类演示如何在内存中排序。@Data@NoArgsC...
    99+
    2023-06-25
  • Java Lambda表达式怎么使用
    这篇文章主要介绍“Java Lambda表达式怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java Lambda表达式怎么使用”文章能帮助大家解决问题。一、背景Lamb...
    99+
    2023-06-29
  • java lambda表达式怎么使用
    Java lambda表达式是Java 8引入的一种新特性,它可以简化代码的编写,尤其是在处理函数式接口时非常方便。下面是使用lam...
    99+
    2023-09-23
    java
  • Java中Lambda表达式基础及使用
    目录一、举例说明1、无参无返回1.1 定义一个接口1.2接口实现类1.3 测试类2、有参无返回代码示例3、有参有返回二、简单事项1、省略模式2、注意事项三、Lambda表达式和匿名内部类的区别1、所需类型不同:2、使用限制不同:3、实现原理...
    99+
    2019-12-07
    Java Lambda表达式 Java Lambda
  • Java中Lambda表达式的使用详解
    目录理解函数式接口以及 Lambda表达式的发展过程Lambda表达式及语法一起来看看具体的使用你需要注意什么Lambda的实际运用1.对集合排序2.遍历集合3.遍历集合(带条件)4...
    99+
    2022-11-12
  • lambda表达式如何在java中使用
    这篇文章给大家介绍lambda表达式如何在java中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Lamda表达式λ 希腊字母表中排序第十一位字母,英语名称为Lambda避免匿名内部类定义过多其实质属于函数式 编程...
    99+
    2023-06-14
  • Java中Lambda表达式使用及详解
    Java中Lambda表达式使用及详解 前言 一、Lambda表达式的简介 Lambda表达式(闭包):java8的新特性,lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中。使用lambda表达式可以让代码更加...
    99+
    2023-08-16
    java
  • Java中Lambda表达式怎么用
    这篇文章主要介绍了Java中Lambda表达式怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言Lambda表达式是java 8中包含的重要功能之一。Lambda表...
    99+
    2023-06-15
  • 使用Stream流对集合排序
    文章目录 0 写在前面1 格式1.1 介绍:1.2 单个属性排序格式:1.3 多个属性排序格式:1.4 注意事项 2 代码举例 0 写在前面 有一些业务需要对集合按照一些规则进行排序,...
    99+
    2023-09-11
    java 数据库 开发语言
  • java Lambda表达式的使用心得
    目录Lambda表达式的心得Lambda表达式法传统方法使用Lambda表达式 你首先要知道的Lambda表达式的技巧Lambda表达式只能用来简化仅包含一个public方法的接口的...
    99+
    2022-11-12
  • Java的Lambda表达式如何使用
    这篇文章主要介绍“Java的Lambda表达式如何使用”,在日常操作中,相信很多人在Java的Lambda表达式如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的Lambda表达式如何使用”的疑...
    99+
    2023-06-30
  • Java 中如何对集合进行排序
    Java 中如何对集合进行排序 在 Java 中,集合是一种非常常见的数据结构,它可以用来存储一组元素,而且可以动态地增加或删除元素。在实际的开发中,我们经常需要对集合中的元素进行排序,以便更方便地查...
    99+
    2023-09-25
    java 开发语言
  • Java中Lambda表达式使用详细解读
    目录前言一、Lambda表达式的简介二、Lambda表达式对接口的要求1.函数式接口2.@FunctionalInterface3.Lambda表达式的语法1.Lambda表达式的基...
    99+
    2023-05-18
    java  Lambda表达式使用 java  Lambda表达式 Lambda表达式使用
  • Java中Lambda表达式有什么用
    小编给大家分享一下Java中Lambda表达式有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Lambda表达式:1、简介首先Lambda表达式是属于Jav...
    99+
    2023-06-29
  • Java中Lambda表达式用法介绍
    Lambda lambda是一个匿名函数,我们可以把lambda表达式理解为是一段可以传递的代码。 lambda简明的地将代码或方法作为参数传递进去执行。 “函数式...
    99+
    2022-11-12
  • java中怎么使用Collections.reverse对list集合进行降序排序
    这篇文章主要讲解了“java中怎么使用Collections.reverse对list集合进行降序排序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java中怎么使用Collections....
    99+
    2023-06-21
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作