美文网首页
走进java世界2--java8 lambda

走进java世界2--java8 lambda

作者: 一万年不是尽头 | 来源:发表于2019-01-30 17:33 被阅读0次

    1、基本用法

    匿名内部类

    • java8之前
    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            //do something
        }
    });
    t.start();
    
    • java8
    Thread t = new Thread(() -> {
        //do something
    });
    t.start();
    

    赋值

    • before
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            //do something      
        }
    };
    
    • now
    Runnable runnable = () -> {
        //do something
    };
    

    方法引用

    • before
    List<String> datas = new ArrayList<>();
    datas.add("a");
    datas.add("b");
    for(String data:datas){
        System.out.println(data);
    }
    

    注意

    如果没有说明,下文若出现datas变量都为上面的定义

    • now
    //原始的匿名内部类
    datas.forEach(new Consumer<String>() {
        @Override
        public void accept(String data) {
            System.out.println(data);
        }
    });
    //采用表达式(方式1)
    datas.forEach((data) -> {
        System.out.println(data);
    });
    
    //采用表达式(方式1)
    datas.forEach(data -> System.out.println(data));
    
    /*
    *如果像这个例子,代码只有一行,且参数是迭代的对象,那么可以试用
    *方法引用过进一步减少代码
    */
    datas.forEach(System.out::println);
    

    2、常用接口用例

    遍历List集合

    datas.forEach(data -> System.out.println(data));
    

    过滤List集合数据

    List<String> result = datas.stream()
        .filter(data -> data.startsWith("a"))//过滤,此处是Predicate接口的实现
        .collect(Collectors.toList());
    

    转换类型

    List<List<String>> result = datas.stream()
        .flatMap(data -> Stream.of(Collections.singletonList(data)))
        .collect(Collectors.toList())
    

    经过上面的代码我们就把List<String>转换成了List<List<String>>,外层List的泛型具体是什么是由Stream.of(Collections.singletonList(data))这个方法的参数类型决定的。

    以上三个是比较常用的函数式接口的操作,其主要都是Stream这个接口在的方法,里面还定义了很多接口。有兴趣的读者可以自行研究。
    求赞!求赞!求赞!

    相关文章

      网友评论

          本文标题:走进java世界2--java8 lambda

          本文链接:https://www.haomeiwen.com/subject/fjmcsqtx.html