Lambda表达式

  • 避免匿名内部类过多
  • 代码更简洁
  • 函数式接口:有且只有一个函数式接口,即只有一个方法。

 测试1

package com.fh.lambda;

public class LambdaTest {
    public static void main(String[] args) {

        IUserService service = () -> System.out.println("【只有一句话可以去掉{花括号}】");;
        service.add();

        IUserService_Argument service_argument = (int id,String type)->{
            int salary = 1;
            int bonus = 2;
            System.out.println(id+"====="+type+"=====" + (salary + bonus));
        };
        service_argument.add(1,"电脑补助");

        service_argument = (id,type)->{
            int salary = 1;
            int bonus = 2;
            System.out.println("【可以去掉参数类型】" + id+"====="+type+"=====" + (salary + bonus));
        };
        service_argument.add(1,"电脑补助");
    }
}

interface IUserService {
    void add();
}

interface IUserService_Argument {
    public void add(int id,String type);
}

测试2

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

/**
 * 模拟中介租房
 */
public class StaticProxy_RentHourse {
    public static void main(String[] args) {
        //new LianJiaProxy(new ZukeTarget()).rent();
        
        new LianJiaProxy(()->{
            System.out.println("我租到一个性价比比较高的房子");
        }).rent();
    }
}

/**
 * 租房
 */
interface Rent{
    public void rent();
}

/**
 * 目标:租客
 */
class ZukeTarget implements Rent{

    @Override
    public void rent() {
        System.out.println("我租到一个性价比比较高的房子");
    }
}

/**
 * 代理:链家
 */
class LianJiaProxy implements Rent{

    private Rent rent;//真实目标角色

    public LianJiaProxy(Rent rent) {
        this.rent = rent;
    }

    @Override
    public void rent() {
        nofityLook();
        this.rent.rent();
        pay();
    }

    private void pay() {
        System.out.println("付款了");
    }

    private void nofityLook() {
        System.out.println("链家通知看房");
    }
}

 

System.out::print 与 System.out.print的区别

 

 

四大函数式接口

函数式接口:有且只有一个方法。

函数型接口

import java.util.function.Function;

/**
 * 函数型接口
 * @FunctionalInterface
 * public interface Function<T, R>
 *      R apply(T t);
 * }
 */
public class FunctionTest {
    public static void main(String[] args) {
      /*  Function<String, String> function = new Function<String, String>() {
            @Override
            public String apply(String s) {
                System.out.println("参数=》"+s);
                return "返回值=》123";
            }
        };
        System.out.println(function.apply("ddd"));*/


        Function<String, String> function =(s)->{
            System.out.println("参数=》"+s);
            return "返回值=》123";
        };
        System.out.println( function.apply("ddd"));
    }
}

断定型接口

import java.util.function.Predicate;

/**
 * 断定型接口
 * @FunctionalInterface
 * public interface Predicate<T> {
 *      boolean test(T t);
 * }
 */
public class PredicateTest {
    public static void main(String[] args) {
        /*Predicate<String> predicate = new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.isEmpty();
            }
        };
        System.out.println(predicate.test("a"));*/

        Predicate<String> predicate = (s)->{
           return s.isEmpty();
        };
        System.out.println(predicate.test("a"));
    }
}

消费型接口

/**
 * 消费型接口
 * public interface Consumer<T> {
 * void accept(T t);
 * }
 */
public class ConsumerTest {
    public static void main(String[] args) {
       /* Consumer<String> consumer = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        consumer.accept("abc");*/

        Consumer<String> consumer = (s) -> {
            System.out.println(s);
        };
        consumer.accept("a");
    }
}

供给型接口

/**
 * 供给型接口
 * @FunctionalInterface
 * public interface Supplier<T> {
 *      T get();
 * }
 */
public class SupplierTest {
    public static void main(String[] args) {
        /*Supplier<String>  supplier = new Supplier<String>() {
            @Override
            public String get() {
                return "abc";
            }
        };
        System.out.println(supplier.get());*/
        Supplier<String>  supplier = ()->{
            return "a";
        };
        System.out.println(supplier.get());
    }
}

 

posted @ 2022-06-17 17:29  禁止摆烂  阅读(26)  评论(0)    收藏  举报