zoukankan      html  css  js  c++  java
  • lambda表达式与函数接口的关系以及使用案例

    lambda表达式与函数式接口是结合使用的。

    函数式接口:接口中只有一个抽象方法的接口,其中可以包括default修饰,static 修饰的实例方法。函数式接口可以在接口上添加@FuncationInterface注解(也可以不加),实现方式可以与普通接口一样,通过定义一个实现类实现该接口,也可以通过匿名类形式实现,新增的实现方式通过lambda表达式。

    lambda表达式可以理解为:对函数式接口和其中抽象方法的实现。当需要一个函数式接口参数的方法时,我们就可以给其传递一个对应的lambda表表达式作为参数,执行时会自动执行函数式接口中的唯一方法,也就是传递过去的lambda表达式。

    函数式接口例如:Comparator接口

    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.List;
    
    public class Java8Test1 {
    
        public static void main(String[] args) {
            
            /**
             * 传统实现方式
             */
            String [] str = {"a","v","n","r"};
            List<String> asList = Arrays.asList(str);
            System.out.println("初始状态:"+asList);
            asList.sort(new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    // TODO Auto-generated method stub
                    return o1.compareTo(o2);
                }
            });
            System.out.println("传统方式:"+asList);
            /**
             * 采用lambda表达式方式 方式一
             */
            String [] str1 = {"a","v","n","r"};
            List<String> list = Arrays.asList(str);
            //lambda表达式对compartor函数数式接口实现
            Comparator<String> comparator = (String o1,String o2)->(o1.compareTo(o2));
            list.sort(comparator);
            System.out.println("lambda表达式返回值:"+list);
            /**
             * 采用lambda表达式  方式二
             */
            String [] str2 = {"a","v","n","r"};
            List<String> list1 = Arrays.asList(str);
            //将lambda表达式作为参数传递
            list1.sort((String o1,String o2)->(o1.compareTo(o2)));
            System.out.println("lambda表达式直接作为参数:"+list1);
            
        }
    }
    View Code

    运行结果:

    初始状态:[a, v, n, r]
    传统方式:[a, n, r, v]
    lambda表达式返回值:[a, n, r, v]
    lambda表达式直接作为参数:[a, n, r, v]

     实现两个学生对象按照成绩排序实现方式

    定义一个学生类

    package cn.sanchuanmu.pojo;
    
    public class Student {
    
        private String name;
        
        private int age;
        
        private double socre;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public double getSocre() {
            return socre;
        }
    
        public void setSocre(double socre) {
            this.socre = socre;
        }
        
    }
    View Code

    方式一:采用传统方式实现

    package cn.sanchuanmu.sort;
    
    import java.util.ArrayList;
    import java.util.Comparator;
    import java.util.List;
    
    import cn.sanchuanmu.pojo.Student;
    
    public class DemoSort {
    
        /**
         * 实现对两个student对象的成绩进行排序
         * @param args
         */
        public static void main(String[] args) {
            
            Student student1 = new Student();
            student1.setName("张三");
            student1.setAge(23);
            student1.setSocre(16.66);
            
            Student student2 = new Student();
            student2.setName("李四");
            student2.setAge(24);
            student2.setSocre(24);
            
            Student student3 = new Student();
            student3.setName("张三");
            student3.setAge(23);
            student3.setSocre(20);
            
            ArrayList<Student> list = new ArrayList<Student>();
            list.add(student1);
            list.add(student2);
            list.add(student3);
            for(int i=0;i<list.size();i++){
                System.out.println(list.get(i).getName()+list.get(i).getSocre());
            }
            
            System.out.println("-------------------------排序之前----------------------------");
            getSortBySocre(list);  //传统方式实现
            
            for(int i=0;i<list.size();i++){
                System.out.println(list.get(i).getName()+list.get(i).getSocre());
            }
            
        }
    
        public static  void getSortBySocre(ArrayList<Student> list) {
            // TODO Auto-generated method stub
            list.sort(new Comparator<Student>() {
    
                @Override
                public int compare(Student o1, Student o2) {
                    // TODO Auto-generated method stub
                    
                    return (int) (o1.getSocre()-o2.getSocre());
                }
            });
        }
        
    }
    View Code

    方式二:采用lambda表达式方式实现

    package cn.sanchuanmu.sort;
    
    import java.util.ArrayList;
    import java.util.Comparator;
    import java.util.List;
    
    import cn.sanchuanmu.pojo.Student;
    
    public class DemoSort {
    
        /**
         * 实现对两个student对象的成绩进行排序
         * @param args
         */
        public static void main(String[] args) {
            
            Student student1 = new Student();
            student1.setName("张三");
            student1.setAge(23);
            student1.setSocre(16.66);
            
            Student student2 = new Student();
            student2.setName("李四");
            student2.setAge(24);
            student2.setSocre(24);
            
            Student student3 = new Student();
            student3.setName("张三");
            student3.setAge(23);
            student3.setSocre(20);
            
            ArrayList<Student> list = new ArrayList<Student>();
            list.add(student1);
            list.add(student2);
            list.add(student3);
            for(int i=0;i<list.size();i++){
                System.out.println(list.get(i).getName()+list.get(i).getSocre());
            }
            
            System.out.println("-------------------------排序之前----------------------------");
        
            getLamdaSort(list);
            for(int i=0;i<list.size();i++){
                System.out.println(list.get(i).getName()+list.get(i).getSocre());
            }
            
        }
    
    
        
        public static void getLamdaSort(List<Student> list){
            
        Comparator<Student> comparator = (Student o1,Student o2)->{return (int) (o1.getSocre()-o2.getSocre());};
        
        list.sort(comparator);
        }
    }
    View Code
  • 相关阅读:
    vscode开发环境安装配置-连载【2】-企业级系统开发实战连载系列 -技术栈(vue、element-ui、qt、c++、sqlite)
    nodejs开发环境安装-连载【1】-企业级系统开发实战连载系列 -技术栈(vue、element-ui、qt、c++、sqlite)
    vs 2015 菜单重复的问题解决方法
    ecshop代码详解之init.php
    前端jquery实现点击图片弹出大图层(且滚动鼠标滑轮图片缩放)
    thinkPHP中省市级联下拉列表
    mysql函数date_format统计刷选按年月日统计的数据
    jQuery插件实现select下拉框左右选择_交换内容(multiselect2side)
    php代码生成二维码
    ASP.NET无效的视图
  • 原文地址:https://www.cnblogs.com/lwdmaib/p/9242342.html
Copyright © 2011-2022 走看看