Function--jdk8用法: Lambda表达式,Predicate,BiPredicate,Consumer,BiConsumer,Supplier,Function,BiFunction

Lambda表达式。首先是参数部分,接着是->,可以视为产出,->之后的内容都是方法体。

  • 当只有一个参数时,可以不需要括号();
  • 正常情况使用()包裹参数,为了保持一致性,也可以使用括号()包裹单个参数;
  • 如果没有参数,则需要使用()表示空参数列表;
  • 对于多个参数,将参数列表放在()内;
  • 如果Lambda表达式中需要多行,那就需要将这些行放在花括号中,并且需要使用return返回产出。
示例
() → System.out.println("Zero parameter"); 
(p) → System.out.println("One parameter p="+ p); 
(a b c) → System.out.println("Multiple parameter a="+ a+" b="+b+" c="+c); 

(a b) -> { 
  int sum=a+b; 
  return sum; 
}
public static void main(String[] args) {
        /**
         * Function<T, R>: 接收1个输入参数,返回1个结果
         */
        Function<Integer, Integer> func1 = i -> {return i+5;};
        System.out.println(calculate(6, func1));


        /**
         * BiFunction<T, U, R> 接受1个入参T和U,并返回结果R。
         */
        BiFunction<String, Integer, String> biFunction = (key, value) -> {return (key + ":" + String.valueOf(value));};
        String key = "age";
        Integer value = 18;
        System.out.println(biFunction.apply(key, value));


        /**
         * Supplier 生产功能函数,无入参,返回1个结果。
         */
        Supplier<String> supplier = () -> {return "Supplier: 商品";};
        System.out.println(supplier.get());


        /**
         * Consumer 消费函数,接收1个输入参数并且无返回的操作
         */
        Consumer<String> consumer1 = s -> System.out.println(s + ",我是消费者1");
        consumer1.accept("铁甲小宝");


        /**
         * BiConsumer<T, U>  消费函数,接受2个输入参数的操作,并且不返回任何结果。
         */
        BiConsumer<String, Integer> biConsumer1 = (s, i) -> {
            System.out.println("我是消费逻辑1" + "," + s + "," + (i + 4));
        };
        biConsumer1.accept("铁甲小宝", 6);


        /**
         * Predicate 断言函数,接受1个输入参数,返回1个布尔值结果。
         */
        // 断言输入值是否大于10
        Predicate<Integer> isSuperTen = i -> {return i>10;};
        System.out.println("P:"+ isSuperTen.test(11));
        System.out.println("P:"+ isSuperTen.test(6));


        /**
         * BiPredicate<T, U> 对2个输入参数T和U进行断言,返回1个布尔值输出。
         */
        // 判断输入1是否大于10,且输入2小于20
        BiPredicate<String, Integer> biPredicate = (s, i) -> {
            return Integer.parseInt(s) > 10 && i < 20;
        };
        System.out.println("B:"+biPredicate.test("15", 16));
        System.out.println("B:"+ biPredicate.test("15", 21));

    }

    public static Integer calculate(Integer i, Function<Integer, Integer> function){
        return function.apply(i);
    }

 

posted @ 2022-06-22 14:03  威兰达  阅读(133)  评论(0编辑  收藏  举报