为什么要引入lambda表达式,以及快速入门示列

lambda表达式是java8以后才出现的新特性

  • 简化代码,以创建一个线程为列,匿名函数写法通过匿名内部类
new Thread((new Runnable() {
            @Override
            public void run() {
                for (int i = 1; i <= 30; i++) Ticket.sale();
                {
                    Ticket.sale();
                }
            }
        }),"D").start();

简化后:

new Thread(()->{for(int i = 1 ; i <= 30 ; i++) Ticket.sale();},"C").start();


lambda表示式使函数具有函数式编程的能力

  1. 但是它的对象必须依赖函数式接口

lambda表达式简介

lambda表达式可以看成是一种匿名函数,使用场景和匿名类场景一致,都在某个方法只使用一次的时候


lambda表达式的语法结构

  1. 无参

()->body;

  1. 一个参数

(param)->body;/(param)->{body;}

  1. 多个参数

(param1,param2…)->{body}

  1. 不同类型的多个参数

(type param1,type param2…)->{body;}

列:常见的

()-> "hello"
(System,out::println);/(String s)->System.out.print()
x->2*x
(x,y)->x-y
(int x ,int y)->x+y

通过上面可以总结出lambda表达式的结构

  • lambda表达式可以有0~n个函数
  • 参数类型可以显示声明,也可以让编译器通过上下文自动判断,列(int x),(x)等价
  • 多个参数用小括号括起来,逗号分隔
  • lambda表达式可以包含0到多条语句,如果有返回值也要把返回语句写上,如果有多条语句要放在代码块中

函数式接口

@Functional interface 是java8特殊的一种函数式接口,这类接口只定义了唯一的抽象方法,列上面java。lang。Runnable就是一种函数式接口,在其内部只定义了一个void run()的抽象方法

public interface Test {
    @FunctionalInterface
    public abstract void run();
}

这里的注解是要求该接口要符合函数式规范除了隐含object公共对象以外只可有一个抽象方法,不包括静态方法

方法引用

  • 格式:类名::方法名

NoparamInterface paraminterface2 = ()-> new HashMap<>();
NoParamInterface paraminterface2 = HashMap::new;

  • 含一个参数的

OneParamInterface paraminterface = (String s)-> System.out.println(s);
OneParamInterface paraminterface = System.out.:println(s)

  • 两个参数的情况

Compare c = (Compare a,compare b)->a.getAge().equals(b.getAge());
Compare c = (a,b)-a.getAge().equals(b.getAge());

  • 使用函数式接口java.util.function.Function实现一个Stirng转Integer的功能

Function<Stirng s,Integer t> function = Integer::parseInt;
Integer num = function.apply(“1”);

  • 线程表示实列

new Thread(new Runnable(){
public void run(){
System…
}
}),start();

new Thread( ()->{System.out.println(“sd”)}).start;//这里一行可以没有大括号多行就要有大括号


  • 列表遍历示列

传统遍历一个list都采用for循环但是java8之后foreach可配合lambda表达式书写
list < String >list = Arrays.asList(“hah”,“hahis”,“shdisd”);
//传统for
for(String a:: list){
System.out.println(a);
}
//改进后
list.foreach(s->Sytem.our.println(s));
list.foreach(System.out::println);


  • 函数式接口示列,java下还有其他类来支持函数式编程

@Test
public void testPredicate(){
list < String >list = Arrays.asList(“hah”,“hahis”,“shdisd”);
filter(list,(str)->(“hdiidh”).equals(str));
filter(list,((String ster).length == 5 ));
}
public static void filter(List list ,Predicted condition ){
for(String s : list){
if(condition.test©{
System.out.println©
}
}
}

发布了38 篇原创文章 · 获赞 1 · 访问量 2270

猜你喜欢

转载自blog.csdn.net/CRD8843/article/details/103599439