java8学习

1、Function函数

public static void main(String[] args) {
      TestController t = new TestController();
      new TestController().aaa(3,value -> t.bbb(value));
}

public int bbb(int b){
        return b+100;
}

public void aaa(int a,Function<Integer,Integer> f){
      Object apply = f.apply(a);
      System.out.println("ggg:"+apply);
}

 2、函数式接口@FunctionalInterface

所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法。

特点

  • 接口有且仅有一个抽象方法
  • 允许定义静态方法
  • 允许定义默认方法
  • 允许java.lang.Object中的public方法
  • 该注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错
// 正确的函数式接口
@FunctionalInterface
public interface TestInterface {

    // 抽象方法
    public void sub();

    // java.lang.Object中的public方法
    public boolean equals(Object var1);

    // 默认方法
    public default void defaultMethod(){

    }

    // 静态方法
    public static void staticMethod(){

    }
}

测试

class Test{

    public static void main(String[] args) {
        TwoPinPlug twoPinPlug = new TwoPinPlug();
        //lamda定义匿名对象,需要在别的方法调用它,并把参数传给它。
        //在TwoPinPlug.getTowPinSocket方法调用lamda匿名对象方法,并传给它参数
        twoPinPlug.getTowPinSocket(a -> {
            //业务处理
            System.out.println("我是2脚插头...");
            return "2脚插头";
        });
    }
}

/**
 * 插座接口
 */
@FunctionalInterface
interface  Socket{
    String getPin(String pin);
}

/**
 * 2脚插头
 */
class TwoPinPlug {

    /**
     *  2脚插头获取对应的2脚插座
     * @param socket
     * @return
     */
    public String getTowPinSocket(Socket socket){
        String pin = socket.getPin("2");
        System.out.println("获取2脚插头...");
        return pin;
    }

}

 3、lamda表达式要传多小个参数?

class Test{

    public static void main(String[] args) {
        //因为函数接口抽象方法有2个参数,所以这里要定义2参数。匿名类
        doTest((p1,p2)->{
            System.out.println("业务逻辑");
            return "";
        });
    }
    
    
    public static void doTest(TestFunctionalInterface testFunctionalInterface){
        testFunctionalInterface.testMethod("aaa","bbb");
    }
    
}

/**
 * 函数接口
 */
@FunctionalInterface
interface  TestFunctionalInterface{
    String testMethod(String p1,String p2);
}
原文地址:https://www.cnblogs.com/chenweichu/p/11589926.html