Lambda简介

Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样传递)。可以写出更简洁、更灵活的代码。


简单示例

package java8.Lambda;

import java.util.Comparator;
import java.util.TreeSet;

import org.junit.Test;

public class TestLambda {

/**
* 原来的匿名内部类
*/
@Test
public void test1() {
Comparator<Integer> com = new Comparator<Integer>() {
@Override
public int compare(Integer x, Integer y) {
return Integer.compare(x, y);
}
};

TreeSet<Integer> set = new TreeSet<>(com);
}

/**
* Lambda表达式
*/
@Test
public void test2() {
Comparator<Integer> com = (x, y) -> Integer.compare(x, y);

TreeSet<Integer> set = new TreeSet<>(com);
}

}


Lambda表达式基础语法

-> 箭头操作符将Lambda表达式拆分成2部分

  • 左侧:Lambda表达式的参数列表(接口中抽象方法的参数列表)
  • 右侧:Lambda表达式中所需执行的功能,即Lambda体(接口中抽象方法的具体实现)

Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编辑器通过上下文推断出数据类型,即“类型推断”

Lambda表达式需要“函数式接口”的支持

  • 函数式接口:接口中只有一个抽象方法的接口,称为函数式接口

package java8.Lambda;

import java.util.Comparator;
import java.util.function.Consumer;

import org.junit.Test;

/**
* Lambda表达式基础语法
*
* -> 箭头操作符将Lambda表达式拆分成2部分
* 左侧:Lambda表达式的参数列表(接口中抽象方法的参数列表)
* 右侧:Lambda表达式中所需执行的功能,即Lambda体(接口中抽象方法的具体实现)
*
* Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编辑器通过上下文推断出数据类型,即“类型推断”
*
* 语法格式1:无参数、无返回值
* () -> System.out.println("xxxx");
*
* 语法格式2:有1个参数、无返回值
* (x) -> System.out.println(x);
*
* 语法格式3:有2个以上的参数、Lambda体中有多条语句、有返回值
* Comparator<Integer> com = (x, y) -> {
* System.out.println("我是来测试的");
* return Integer.compare(x, y);
* };
*
* 语法格式4:有2个以上的参数、Lambda体中只有一条语句、有返回值
* {} 和 return 可以省略不写
*
*
* Lambda表达式需要“函数式接口”的支持
* 函数式接口:接口中只有一个抽象方法的接口,称为函数式接口
*
* @author 陈霓清
*/
public class TestLambda2 {

/**
* 语法格式1:无参数、无返回值
*/
@Test
public void test1() {
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("xxxx");
}
};
r1.run();

System.out.println("--------------");

Runnable r2 = () -> System.out.println("yyyy");
r2.run();
}

/**
* 语法格式2:有1个参数、无返回值
*/
@Test
public void test2() {
Consumer<String> con = (x) -> System.out.println(x);
con.accept("我是来测试的");
}

/**
* 语法格式3:有2个以上的参数、Lambda体中有多个语句、有返回值
*/
@Test
public void test3() {
Comparator<Integer> com = (x, y) -> {
System.out.println("我是来测试的");
return Integer.compare(x, y);
};

int flag = com.compare(1, 2);
System.out.println(flag);
}

/**
* 语法格式4:有2个以上的参数、Lambda体中只有一条语句、有返回值
*/
@Test
public void test4() {
Comparator<Integer> com = (x, y) -> Integer.compare(x, y);

int flag = com.compare(1, 2);
System.out.println(flag);
}
}



回到顶部