zoukankan      html  css  js  c++  java
  • java1.8常用的函数式接口

    //常用函数式接口
            final int num = 2;
            //num++;
            //第一个为传入参数的类型;第二个为返回数据的类型
            Function<int[],String> function = (from) -> {
                String value=null;
                if(from[0]>num) 
                    value="gt num";
                else
                    value="lt num";
                return value;
            };
            int[] arr= {1,2,3,4,5};
            System.out.println(function.apply(arr));//6
            
            //谓词接口用来进行条件判断,它会传入一个参数,判断这个参数是否满足某个条件,并进行布尔返回。
            Predicate<Integer> pre =(a) -> a==num;
            System.out.println(pre.test(12));
            
            //单元操作接口对传入的参数进行转化,并且会返回指定数据类型的结果。对于这里的“单元”指的是:操作参数只有一个。
            IntUnaryOperator intUnaryOperator = (in) -> (in+12)>0? 1:2;
            System.out.println(intUnaryOperator.applyAsInt(3));
        
            //二元操作和单元操作的区别是,二元操作可以接受2个参数。通常,它进行的是两个元素的运算。两个传入参数和返回值的数据类型,也都是相同的。
            IntBinaryOperator intBinaryOperator = (left,right) -> left+right;
            System.out.println(intBinaryOperator.applyAsInt(1, 2));
        
            //消费者接口和函数接口的不同之处在于,消费者是“无声的”,也就是他们会默默地把传入的数据“吃掉”,而不做任何返回。
            Consumer<String> consumer = (t)-> {};
            
            //与之相反的是工厂接口(或者可以翻译为供应商接口),它门只做产出而不进行任何消费,通常可以把他们当成一个工厂。
            Supplier<String> supplier=()->{return "get..";};
            supplier.get();
            
            //使用自定义的函数式接口
            MyInterface<Integer, Integer, String> my=(a,b)->{
                String result=null;
                if(a+b<60) {
                    result = MyInterface.BUJIGE;
                }
                if(a+b>60&&a+b<80) {
                    result = MyInterface.JIGE;
                }
                return result;
            };
            System.out.println(my.test(10,60));

              Arrays.stream(new Integer[] {1,2,3,4}).map((Integer x)-> x*2).filter((x)->x>3).forEach(System.out::print);
              System.out.println("---");
              Arrays.stream(new Integer[] {1,2,3,4}).filter((x)->x>2).peek((s)->System.out.println(s));

    自定义接口

    @FunctionalInterface
    public interface MyInterface<A,B,C> {
        final String JIGE="及格";
        final String YOUXIU="优秀";
        final String LIANGHAO="良好";
        final String BUJIGE="不及格";
        //A B为传入的数据类型,C为返回的数据类型
        public C test(A a,B b);
    }
  • 相关阅读:
    面试40-一个数组,有2个数字出现奇数次,其余都是偶数次,求这两个数字O(n) O(1)
    面试38-数字在排序数组中出现的个数
    面试35-删除字符串重复字符-删除出现在第二个字符串中的字符-第一个只出现一次的字符-hash表计数
    意外get接近完美的黑苹果 (UEFI + GPT)
    Windows 启用/禁用内置管理员 Administrator
    出去走走
    【搬运】Wget 命令详解
    C语言学习之插入排序
    由 UWP 版网易云音乐闪退引发的博文
    gets() 与 scanf() 的小尴尬
  • 原文地址:https://www.cnblogs.com/wwzyy/p/5527224.html
Copyright © 2011-2022 走看看