zoukankan      html  css  js  c++  java
  • Lambda表达式

    Lambda表达式

    yi使用之前的写多线程程序中,为了创建一个Thread对象,要先创建一个Runable实现类的对象,为此还要先创建一个Runable接口的实现类(或者使用匿名内部类),重写run方法,但是所有的工作中,最重要的就是run方法里的线程任务,其他的都是不得已而为之,我们不想创建什么实现类,创建什么匿名内部类,只希望run方法里的方法体可以执行,Lambda表达式可以简化这些操作。

    使用前提:

    1、必须有接口

    2、接口必须只有一个抽象方法(这样才知道到底是重写哪一个方法)

    package cn.zhuobo.day12.lambda;
    
    public class Demo01Lambda {
        public static void main(String[] args) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName() + " new thread task");
                }
            }).start();
            // 使用Lambda表达式改写上面的代码
    
            new Thread(() ->{
                System.out.println(Thread.currentThread().getName() + " new thread task");
                System.out.println("hahah");
            }
            ).start();
        }
    }
    

    Lambda表达式的标准格式:

    有三部分组成:一些参数,一个箭头,一段代码

    格式:

    (参数) -> {一段重写代码}

    一些参数:抽象方法中的参数列表,没有就空着,有多个就用逗号分割

    一个箭头:表示把参数传递个方法体{},也就是花括号里的代码

    一段重写的代码:花括号里的包括重写接口的方法的方法体

    Lambda表达式的演示:无参数

    package cn.zhuobo.day12.lambda;
    
    public class CookMain {
        public static void main(String[] args) {
            // 这是之前的写法,method方法要使用Cook的对象作为参数,那就在参数列表里创建一个匿名内部类,并且重写Cook接口的makeFood方法
            method(new Cook() {
                @Override
                public void makeFood() {
                    System.out.println("make a pizza");
                }
            });
            
    // 使用Lambda表达式一样可以调用这个方法,不用创匿名内部类
            method(() -> {
                System.out.println("make a pizza");
            });
        }
        public static void method(Cook cook) {
            cook.makeFood();
        }
    }
    

    Lambda表达式的演示:有参数

    对Person数组排序

    package cn.zhuobo.day12.lambda;
    
    import java.lang.reflect.Array;
    import java.util.Arrays;
    import java.util.Comparator;
    
    public class PersonMain {
        public static void main(String[] args) {
            Person[] people = {new Person("aaa", 12),
                                new Person("bbb", 11),
                                new Person("ccc", 10)};
    		// 重写Comparator接口的compare方法
            Arrays.sort(people, new Comparator<Person>() {// sort方法的参数是一个接口,可以创建匿名内部类
                @Override
                public int compare(Person o1, Person o2) {
                    return o1.getAge() - o2.getAge();// 年龄升序
                }
            });
    		// 使用Lambda表达式,简化穿件匿名内部类
            Arrays.sort(people,(Person o1, Person o2) -> {// 括号的参数的上面要重写的方法的参数列表
                return o2.getAge() - o1.getAge();// 年龄降序
            });
    
    
            for (Person person : people) {
                System.out.println(person);
            }
        }
    }
    
  • 相关阅读:
    HDU 2767 Proving Equivalences(强连通缩点)
    HDU 3836 Equivalent Sets(强连通缩点)
    POJ 2762 Going from u to v or from v to u?(强连通+缩点+拓扑排序)
    织梦dedecms中自定义表单必填项的设置方法
    dedecms中调用隐藏栏目的方法
    去掉dedecms友情链接中的LI标签的方法
    Mysql修改端口号 织梦DedeCMS设置教程
    织梦DedeCMS文章标题自动增加长尾关键词的方法
    DEDECMS短标题标签调用与字数修改的方法
    dedecms批量替换文章中超链接的方法
  • 原文地址:https://www.cnblogs.com/zhuobo/p/10649126.html
Copyright © 2011-2022 走看看