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

    Lambda表达式

    • Lambda表达式:特殊的匿名内部类,语法更简洁

    • Lambda表达式允许把函数作为一个方法的参数(函数作为方法参数传 递),将代码像数据一样传递。

    • 基本语法:

      <函数式接口> <变量名> = (参数1,参数2...) -> { //方法体
      };
      
    • Lambda引入了新的操作符:->(箭头操作符),->将表达式分成两部分

      • 左侧:(参数1,参数2…)表示参数列表

      • 右侧:{}内部是方法体

    • 注意事项:

      • 形参列表的数据类型会自动推断。

      • 如果形参列表为空,只需保留() 。

      • 如果形参只有1个,()可以省略,只需要参数的名称即可。

      • 如果执行语句只有一句,且无返回值,{}可以省略,若有返回值,则若想省去{},则 必须同时省略return,且执行语句也保证只有一句。

      • Lambda不会生成一个单独的内部类文件。

    函数式接口

    1. 如果一个接口只有一个抽象方法,则该接口称之为函数式接口,函数式接口 可以使用Lambda表达式,Lambda表达式会被匹配到这个抽象方法上 。
    2. @FunctionalInterface 注解可以检测接口是否符合函数式接口。

    示例:

    1. //接口
      @FunctionalInterface
      public interface Usb {
          void service();
      }
      
    2. //实现
      public class Demo {
          public static void main(String[] args) {
              Usb mouse = new Usb() {
                  @Override
                  public void service() {
                      System.out.println("鼠标开始工作了...");
                  }
              };
      
              Usb fan = () -> System.out.println("风扇开始工作了...");
      
              run(mouse);
              run(fan);
          }
      
          public static void run(Usb usb) {
              usb.service();
          }
      }
      

    方法引用

    • 方法引用是Lambda表达式的一种简写形式。 如果Lambda表达式方法体中 只是调用一个特定的已经存在的方法,则可以使用方法引用。

    • 常见形式

      • 对象::实例方法

      • 类::静态方法

      • 类::实例方法

      • 类::new

    public class Demo {
    	public static void main(String[] args) {
    		//1 对象::实例方法
    		Consumer<String> consumer=s->System.out.println(s);
    		consumer.accept("hello");
    		Consumer<String> consumer2=System.out::println;
    		consumer.accept("world");
    		
    		//2类::静态方法
    		Comparator<Integer> com=(o1,o2)->Integer.compare(o1, o2);
    		Comparator<Integer> com2=Integer::compare;
    			
    		//3类::实例方法
    		Function<Employee, String> function=e->e.getName();
    		Function<Employee, String> function2=Employee::getName;
    		
    		System.out.println(function2.apply(new Employee("小明", 50000)));
    		
    		//4类::new
    		Supplier<Employee> supplier=()->new Employee();
    		Supplier<Employee> supplier2=Employee::new;
    		
    		Employee employee=supplier.get();
    		System.out.println(employee.toString());
    		
    	}
    }
    
  • 相关阅读:
    将文件读取到内存、打印pe结构
    DIV与IDIV的用法
    内存对齐与硬盘对齐
    逆向笔记013
    自己实现的字符串长度求取、复制、连接
    在一段内存中查找数据
    用Maven构建Mahout项目实现协同过滤ItemCF--集群版
    用Maven构建Mahout项目实现协同过滤userCF--单机版
    从源代码剖析Mahout推荐引擎
    推荐系统第2周--itemCF和userCF
  • 原文地址:https://www.cnblogs.com/techoc/p/13579358.html
Copyright © 2011-2022 走看看