黑马程序员——Lambda表达式简述

来源:互联网 发布:人工智能入门需要 编辑:程序博客网 时间:2024/06/08 02:01

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

一、概述

  Lambda表达式(λ expression)是从Java8增加的新语法。大体上相当于其他语言的“匿名函数”或“函数指针。在Java中它实际上是“匿名类的一个实例”。
  Lambda表达式的基本写法:参数->结果
    参数是()或1个参数或 (多个参数)
    结果是指 表达式 或 语句 或 {语句}

二、应用

  1)线程例子
  new Thread( ()->{ … } ).start();
  2)积分例子
  d = Integral( x->Math.sin(x), 0, 1, EPS );
  d = Integral( x->x*x, 0, 1, EPS );
  d = Integral( x->1, 0, 1, EPS );
  3)按钮事件处理
  btn.addActionListener( e->{ … } ) );

public doIt = new Runnable(){    public void run(){        System.out.println("aaa");    }};new Thread(dolt).start();

  以上程序用Lambda表达式改写成一行代码:

new Thread(()->System.out.println("aaa")).start();

  Lambda表达式是接口或者说是接口函数的简写。

double d = Integral(new Fun(){    public double fun(double x){        return Math.sin(x);    }},0,Math.PI,1e-5);

  使用Lambda表达式:

double d = Integral(x->Math.sin(x),0,Math.PI,1e-5);

  由于Lambda表达式只能表示一个函数,所以能写成Lambda的接口要求包含且最多只能有一个抽象函数。这样的接口可以(但不强求)用注记@FunctionalInterface来表示。称为函数式接口。

/*函数式接口举例*/@FunctionalInterfaceinterface Fun {double fun(double x);}
/*实例:排序*/import java.util.*;class Person{    public String name;    public int age;    public double score;    public Person(String n, int a, double s) {        name = n; age = a; score = s;    }    public String getName(){ return name;}    public String toString() {        return String.format("%s[%d](%f)", name,age,score);    }    public static int better(Person p1, Person p2) {        return (int)(p2.score - p1.score);    }}class LambdaSortPerson {   public static void main(String... args) {    Person[] people = new Person[] {      new Person("Ted", 18, 91),      new Person("Charlotte", 19, 88),      new Person("Michael", 20, 99),      new Person("Matthew", 21, 84)    };    Comparator<Person> compareAge =        (p1, p2) -> p1.age-p2.age;    Arrays.sort(people, compareAge);    Arrays.sort(people,         (p1, p2) -> p1.age-p2.age);    Arrays.sort(people,         (p1, p2) -> (int)(p1.score-p2.score));    Arrays.sort(people,         (p1, p2) -> p1.name.compareTo(p2.name));    Arrays.sort(people,         (p1, p2) -> -p1.name.compareToIgnoreCase(p2.name));    Comparator<Person> cf =  Person::better;     Arrays.sort(people, cf);    Arrays.sort(people, Person::better);       Arrays.sort(people,  Comparator.comparing(        Person::getName));      for (Person p : people)      System.out.println(p);  } }

  由此可见,Lambda表达式不仅仅是简写了代码,更重要的是:它将代码也当成数据来处理。

0 0
原创粉丝点击