唐僧喜欢小龙女

导航

lambda 表达式

1、lambda表达式的作用

个人理解卵用没有,但是用的还很多,不会还不行。

2、什么情况下可以用

函数式接口的情况下用,什么是函数式接口呢,接口里有且只有一个接口的时候才能用表达式(@FunctionalInterface 这个注解修饰

)(除了接口中的 默认方法和静态方法)

3、lambda表达式语法说明

    /**
     *
     *  ->是叫箭头操作符
     *  -> 左边是型参列表,指的是接口方法里面的参数
     *  -> 右边是lambda体,实现接口重写方法时,方法里面的方法体,不用关心方法叫什么名字
     *
     *  接口里面只能有一个方法,两个方法就玩不转了
     */

4、使用举例

4.1没有参数没有返沪值

@Test
    public void test1(){
        /**
         * 无参无返回值
         */
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("我爱北京天安门");
            }
        };
        runnable.run();
//改成lambda 表达式的写法 System.out.println("*******************"); // 表达式的本质是:作为接口的一个实例 Runnable runnable1 = () -> System.out.println("我爱北京故宫"); runnable1.run(); }

4.2 有一个参数没有返回值

    
public interface Consumer<T> {
    public void accept(T t);
}





   /**
     * 一个参数 没有返回值
     */
    @Test
    public void test2(){
        System.out.println("====================");
        Consumer<String> c =(s) -> {
            System.out.println(s);
        };
        c.accept("ceshi lambda");

    }

4.3表达式有两个或两个以上的参数,多条执行语句,并且有返回值时

 @Test
    public void test5(){

        Comparator<Integer> comparator = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        };

        System.out.println("*****************");


        Comparator<Integer> com = (o3,o4)->{
            System.out.println(o3);
            System.out.println(o4);
            return o3.compareTo(o4);
        };

        System.out.println(com.compare(12,34));

    }

 4.4 lambda表达式的参数部分指定参数类型

        SingleOutputStreamOperator<Tuple2<String, Integer>> wordAndOneDS = linDs
                .flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
                    @Override
                    public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
                        // 按照 空格 切分
                        String[] words = value.split(" ");
                        for (String word : words) {
                            // 转换成 二元组 (word,1)
                            Tuple2<String, Integer> wordsAndOne = Tuple2.of(word, 1);
                            // 通过 采集器 向下游发送数据
                            out.collect(wordsAndOne);
                        }
                    }
                });




        // lambda还可以这样的写啊
        socketDS.flatMap((String value, Collector<Tuple2<String,Integer>> out)->{
            String[] words = value.split(" ");
            for (String word : words) {
                // 转换成 二元组 (word,1)
                Tuple2<String, Integer> wordsAndOne = Tuple2.of(word, 1);
                // 通过 采集器 向下游发送数据
                out.collect(wordsAndOne);
            }

        });

  

  

 

posted on 2021-05-02 15:21  与时具进&不忘初心  阅读(51)  评论(0编辑  收藏  举报