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

    Lamda表达式

    1、λ 希腊字母表中排序第十一位的字母,英语名称为 Lamda
    2、避免匿名内部类定义过多
    3、可以让你的代码看起来很简洁
    4、去掉了一堆没有意义的代码,留下核心的逻辑
    5、其实质属于函数式编程的概念
        (params)-> expression[表达式]
    	(params) -> statement[语句]
    	(params) -> {statements}
    语句:
    	a -> System.out.println("i like lamda-->"+a)
        new Thread (()->System.out.println(“多线程学习。。。。”)).start();
    

    怎么理解Lamda

    1、理解Functional interface(函数式接口)是学习java8 lamda表达式的关键所在。

    2、函数式接口的定义:

    • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。
    public interface Runnable{
    	public abstract void run();
    }
    
    • 对于函数式接口,我们可以通过lamda表达式来创建该接口的对象

    推导Lamda表达式

    package com.liu.thread.demo3;
    
    public class Lamda {
        //3、静态内部类,同样实现ILike接口
        static class Like2 implements ILike{
            @Override
            public void lamda() {
                System.out.println("i like lamda2");
            }
        }
    
        public static void main(String[] args) {
            ILike like = new Like();
            like.lamda();
            like = new Like2();
            like.lamda();
    
            //4、局部内部类
            class Like3 implements ILike{
                @Override
                public void lamda() {
                    System.out.println("i like lamda3");
                }
            }
            like = new Like3();
            like.lamda();
    
            //5、匿名内部类,没有类的名称。必须借助接口或者父类
            like = new ILike() {
                @Override
                public void lamda() {
                    System.out.println("i like lamda4");
                }
            };
            like.lamda();
    
            //6、用lamda表达式简化
            like = ()->{
                System.out.println("i like lamda5");
            };
            like.lamda();
        }
    }
    
    //1、定义一个只有一个抽象方法的接口
    interface ILike{
        abstract void lamda();
    }
    //2、实现类
    class Like implements ILike{
        @Override
        public void lamda() {
            System.out.println("i like lamda1");
        }
    }
    

    输出:

    带一个参数的Lamda简化

    package com.liu.thread.demo3;
    
    public class Lamda2 {
        public static void main(String[] args) {
            ILive live = null;
    
            //Lamda简化
            live = (int a)->{
                System.out.println("I live you"+a);
            };
            live.live(1);
    
            //Lamda简化参数类型
            live = (a)->{
                System.out.println("I live you"+a);
            };
            live.live(2);
    
            //Lamda简化括号
            live = a->{
                System.out.println("I live you"+a);
            };
            live.live(3);
    
            //Lamda简化括号(只有一条语句时)
            live = a->System.out.println("I live you"+a);
            live.live(4);
        }
    
    }
    interface ILive{
        abstract void live(int a);
    }
    

    输出:

    带多个参数的Lamda简化

    package com.liu.thread.lamda;
    
    public class Lamda3 {
        public static void main(String[] args) {
            ILive live = null;
    
            //Lamda简化
            live = (int a,int b)->{
                System.out.println("I live you"+a+b);
            };
            live.live(1,1);
    
            //Lamda简化参数类型(要去掉就要都去掉)
            live = (a,b)->{
                System.out.println("I live you"+a+b);
            };
            live.live(2,2);
    
            //Lamda简化括号(只有一个语句时)
            live = (a,b)->System.out.println("I live you"+a+b);
            live.live(3,3);
        }
    
    }
    
    interface ILive{
        abstract void live(int a,int b);
    }
    

    输出:

    总结

    lambda表达式只能有一-行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹。
    
    前提是接口为函数式接口
    
    多个参数也可以去掉参数类型,要去掉的话都去掉,必须加上()
    
  • 相关阅读:
    厂商前缀
    文本阴影和边框阴影
    2D转换
    overflow属性
    margin属性
    CSS圆角边框
    浮动定位
    文档流定位
    position属性
    选择器二
  • 原文地址:https://www.cnblogs.com/lhy8116/p/14205490.html
Copyright © 2011-2022 走看看