常用Lamda表达式

常用Lamda表达式1、在工作中我们有部分lamda表达式经常会用到,在此做个小总结这里新建个实体类,来做测试publicclassLamdaVO{privateIntegerid;privateStringname;privateStringeamil;publicLamdaVO(){}publicLamdaVO(Integ…

大家好,又见面了,我是你们的朋友全栈君。

1、在工作中我们有部分lamda表达式经常会用到,在此做个小总结

这里新建个实体类,来做测试

public class LamdaVO {
    private Integer id;
    private String name;
    private String eamil;

    public LamdaVO() {
    }

    public LamdaVO(Integer id, String name, String eamil) {
        this.id = id;
        this.name = name;
        this.eamil = eamil;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getEamil() {
        return eamil;
    }

    public void setEamil(String eamil) {
        this.eamil = eamil;
    }

    @Override
    public String toString() {
        return "LamdaVO{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", eamil='" + eamil + '\'' +
                '}';
    }
}

对lamda用的比较多的几种,做一下展示

public class FreemakeraddApplicationTests {

    @Test
    public void lamdaTest() {
        List<LamdaVO> lamdaVOList = new ArrayList<>();
        LamdaVO user1 = new LamdaVO(1, "小明", "12324qq.com");
        LamdaVO user2 = new LamdaVO(2, "小芳", "12324qq.com");
        LamdaVO user3 = new LamdaVO(3, "小华", "12324qq.com1");
        LamdaVO user4 = new LamdaVO(4, "小华", "12324qq.com2");

        lamdaVOList.add(user1);
        lamdaVOList.add(user2);
        lamdaVOList.add(user3);
        lamdaVOList.add(user4);

        //lamda表达式 过滤加遍历
        System.out.println("lamda表达式 过滤加遍历");
        lamdaVOList.stream().filter(u -> u.getId() > 1).
                forEach(u -> System.out.println(u.getId() + ":::" + u.getName()));

        //lamda表达式对提取为map对象
        
        
        // Map<String, String> map = lamdaVOList.stream().
         //       collect(Collectors.toMap(LamdaVO::getName, LamdaVO::getEamil));
        //如果采用上面方式需要特别注意,使用Collectors.toMap时,需要保证生成map的唯一性,否则会报
       // java.lang.IllegalStateException: Duplicate key 错误。可以采用下面的方式规避,
       //下面  (o, n) -> o表示的 如果出现重复key,则用 原来代替新的key,所以打印的小华的邮箱 为
     //   小华::12324qq.com1.同样可以使用  (o, n) -> n 这样当出现重复key时候,则会用新的key代替老的key了,
     // 此时 打印的小华的邮箱  则为   小华::12324qq.com2


        System.out.println("lamda表达式对提取为map对象");
        Map<String, String> map = lamdaVOList.stream().
                collect(Collectors.toMap(LamdaVO::getName, LamdaVO::getEamil, (o, n) -> o));
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println(entry.getKey()+"---"+entry.getValue());
        }

        //lamda 表达式对对象里面某个属性提取List对象
        System.out.println("lamda 表达式对对象里面某个属性提取List对象");
        List<String> list = lamdaVOList.stream().map(LamdaVO::getName).collect(Collectors.toList());
        list.stream().forEach(s-> System.out.println(s));

        //lamda表达式变为map<String,List<String>>
        System.out.println("lamda表达式变为map<String,List<String>>");
        Map<String, List<LamdaVO>> map2 = lamdaVOList.stream().collect(Collectors.groupingBy(LamdaVO::getName));
        for (Map.Entry<String, List<LamdaVO>> entry : map2.entrySet()) {
            System.out.println(entry.getKey()+"::"+entry.getValue());
        }

   }

}

查看lamda表达式的输出结果:
常用Lamda表达式

我们在使用lamda表达式排序的时候,很多时候考虑到空指针可能会选择传统的方式,lamda实际上也有防止空指针的排序。

 @Test
    public void lamdaCompareTest(){
        LamdaVO lamdaVO1 = new LamdaVO(null, "name1", "eamil1");
        LamdaVO lamdaVO2 = new LamdaVO(2, "name2", "eamil2");
        LamdaVO lamdaVO3 = new LamdaVO(3, "name3", "eamil3");
        LamdaVO lamdaVO4 = new LamdaVO(null, "name4", "eamil4");
        LamdaVO lamdaVO5 = new LamdaVO(5, "name5", "eamil6");

        List<LamdaVO> lamdaLst = new ArrayList<>();
        lamdaLst.add(lamdaVO1);
        lamdaLst.add(lamdaVO2);
        lamdaLst.add(lamdaVO3);
        lamdaLst.add(lamdaVO4);
        lamdaLst.add(lamdaVO5);

        List<LamdaVO> nullLastPositive = lamdaLst.stream().sorted(Comparator.comparing(LamdaVO::getId, Comparator.nullsLast(Integer::compareTo))).collect(Collectors.toList());
        System.out.println("null在最后正序:"+nullLastPositive);

        List<LamdaVO> nullLastReverse = lamdaLst.stream().sorted(Comparator.comparing(LamdaVO::getId, Comparator.nullsLast(Integer::compareTo)).reversed()).collect(Collectors.toList());
        System.out.println("null在最后正序:"+nullLastReverse);

        List<LamdaVO> nullFirst = lamdaLst.stream().sorted(Comparator.comparing(LamdaVO::getId, Comparator.nullsFirst(Integer::compareTo))).collect(Collectors.toList());
        System.out.println("null在最前:"+nullFirst);
        List<LamdaVO> list = lamdaLst.stream().sorted(Comparator.comparing(LamdaVO::getId)).collect(Collectors.toList());
        System.out.println(list);

    }

结果:

在这里插入图片描述
在排序中添加类似这种Comparator.nullsLast(Integer::compareTo)) ,是可以防止lamda报空指针异常的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132241.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 爬虫福利一 之 27报网MM

    爬虫福利一 之 27报网MM《爬虫福利二》点击:https://blog.csdn.net/PY0312刚学爬虫花了4个小时写的,每一步备注的都很清楚,喜欢的朋友自己可以研究研究……目标网站:https://www.27bao.com环境:Python3.x相关第三方模块:requests、lxmlRe:各位在测试时只需要打开终端,使用pythonxxx.py运行即可。源码如下…

    2022年6月22日
    81
  • Redis 的 8 大数据类型,写得非常好!

    Redis 的 8 大数据类型,写得非常好!

    2022年2月17日
    35
  • C#中HttpWebRequest的用法详解

    C#中HttpWebRequest的用法详解HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择。它们支持一系列有用的属性。这两个类位于System.Net命名空间,默认情况下这个类对于控制台程序来说是可访问的。请注意,HttpWebRequest对象不是利用new关键字通过构造函数来创建的,而是利用工厂机制(factorymechanism)通过Create()方法来创建的。另外,你可…

    2022年7月15日
    21
  • Linux压缩打包命令——tar、zip、unzip

    打包跟压缩的区别:打包是指将多个文件或者目录放在一起,形成一个总的包,这样便于保存和传输,但是大小是没有变化的,压缩是指将一个或者多个大文件或者目录通过压缩算法使文件的体积变小以达到压缩的目的,可以节省存储空间,在压缩的时候通常是先打包再压缩;tar命令tar命令参数前面加”-“与不加“-”的区别:tar命令参数前面加不加“-”执行命令的结果是没有区别的,区别只要是在与linux风…

    2022年4月6日
    102
  • uname命令详解_uname -r

    uname命令详解_uname -r博客搬家,原地址:https://langzi989.github.io/2018/12/25/uname命令说明/使用uname命令可以帮助我们了解当前使用的系统的硬件信息,内核信息,处理器信息和当前使用的系统信息等。该命令可以在Fedora,Debian,CentOS,SUSELinux或者其他Linux操作系统的发行版本上运行。uname命令的使用方法在网络上已经有很多,甚…

    2025年8月13日
    4
  • windows Tasklist命令详解

    windows Tasklist命令详解“Tasklist”命令是一个用来显示运行在本地或远程计算机上的所有进程的命令行工具,带有多个执行参数。作用:结束一个或多个任务或进程。可以根据进程ID或图像名来结束进程。语法格式:TASKLIST[/Ssystem[/Uusername[/P[password]]]][/M[module]|/SVC|/V][/FIfilter][/FOformat][/NH]参数列表:/Ssystem指定连接…

    2022年5月24日
    181

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号