[关闭]
@huangyichun 2017-05-03T20:19:24.000000Z 字数 1257 阅读 697

Lambda表达式

Java8


去除永久区,方法区变为元空间,调优参数也修改了

在此输入正文

image.png-103.3kB

  1. package java_8;
  2. import org.junit.Test;
  3. import java.util.Comparator;
  4. import java.util.function.Consumer;
  5. /**
  6. * 一、Lambda 表达式基础语法:Java8中引入一个新的操作符"->"该操作符称为箭头操作符或Lambda操作符
  7. * 箭头操作符将Lambda表达式拆分为两部分:
  8. * 左侧: Lambda表达式的参数列表
  9. * 右侧: Lambda表达式中所需要执行的功能,即Lambda体
  10. *
  11. * 语法格式一:无参数,无返回值
  12. * () -> System.out.println("Hello Lambada!")
  13. * 语法格式二:有一个参数,无返回值
  14. * (x) -> System.out.println(x)
  15. * 语法格式三:若只有一个参数,参数的小括号可以不写
  16. * x -> System.out.println(x);
  17. * 语法格式四:有两个以上的参数,并且Lambda体中有多条语句
  18. * Comparator<Integer> com = (x,y) ->{
  19. * System.out.println("函数式接口");
  20. * return Integer.compare(x,y);
  21. * };
  22. * 语法格式五:若Lambda体中只有一条语句,return和大括号都可以不写
  23. * Comparator<Integer> com = (x,y) -> Integer.compare(x,y);
  24. * 语法格式六:Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器可以通过上下文 推断出,数据类型。即"类型推断"
  25. * 二、Lambda 表达式需要"函数式接口"的支持
  26. * 函数式接口:接口中只有一个抽象方法的接口,称为函数式接口。可以使用注 解@FunctionalInterface修饰
  27. * 可以检查是否是函数式接口
  28. */
  29. public class TestLambda2 {
  30. @Test
  31. public void test1(){
  32. int num = 0;//jdk1.7前,必须是final
  33. Runnable r = new Runnable() {
  34. @Override
  35. public void run() {
  36. System.out.println("Hello world!" + num);//匿名内部类中num++是错的
  37. }
  38. };
  39. r.run();
  40. System.out.println("------------------------------");
  41. Runnable r1 = () -> System.out.println("Hello Lambda" + num);
  42. r1.run();
  43. }
  44. @Test
  45. public void test2(){
  46. Consumer<String> con = x -> System.out.println(x);
  47. con.accept("我的瓶子");
  48. }
  49. @Test
  50. public void test3(){
  51. Comparator<Integer> com = (x,y) -> Integer.compare(x,y);
  52. }
  53. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注