zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    逻辑回归和最大熵模型
    R文本挖掘之jiebaR包
    iOS 好文源码收藏
    学习iOS最权威的网站
    面向对象的六大原则
    Dart的JIT 与 AOT
    iOS组件化开发-发布私有库
    Flutter 基础布局Widgets之Align
    Flutter报错 Waiting for another flutter command to release the startup lock...
    Dart中类的getter和setter
  • 原文地址:https://www.cnblogs.com/chenweichu/p/11589926.html
Copyright © 2011-2022 走看看