Java - Lambda、Stream、TimerTask

Lambda、Stream、TimerTask

一、Lambda

  • 概述

  • Lambda标准格式

    public static void main(String[] args) {
        //labmda其实就是对"方法"的重写。
        //(参数类型 参数名)->{代码语句}
        //        ()内的语法与传统方法参数列表一致:无参数则留空,多个参数则用逗号分隔。
        //        ->是新引入的语法格式,代表指向动作。
        //        {}内的语法与传统方法体要求基本一致。
    
        new Runnable() {
            @Override
            public void run() {
                System.out.println("runnable");
            }
        };
    
        //lambda:重写run方法
        Runnable r = () -> {
            System.out.println("lambda");
        };
    
    
        //Comparator---> int compare(T o1, T o2);
        new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        };
        //lambda:重写compare方法
        Comparator<Integer> c = (Integer o1, Integer o2) -> {
            return o1 - o2;
        };
    }
    
  • Lambda省略格式

  • Lambda应用场景

  1. 只有函数型接口可用,也就是接口中只有一个抽象方法,也就是说就等着重写的。

  2. equals是类都有的,不算那个抽象方法。

  3. 表达式前面要指明接口类名,编译器才知道重写谁的方法。

二、Stream

  • 概述

  • 获取 Stream 流

  • Stream 常用方法

    private static void method2() {
        //两个集合
        List<String> one = new ArrayList<>();
        one.add("迪丽热巴");
        one.add("宋远桥");
        one.add("苏星河");
        one.add("老子");
        one.add("庄子");
        one.add("孙子");
        one.add("洪七公");
    
        List<String> two = new ArrayList<>();
        two.add("古力娜扎");
        two.add("张无忌");
        two.add("张三丰");
        two.add("赵丽颖");
        two.add("张二狗");
        two.add("张天爱");
        two.add("张三");
    //Stream 使用
        Stream.concat(
                one.stream().filter(name -> name.length() == 3).limit(2),
                two.stream().filter(name -> name.startsWith("张")).skip(2)
        ).map(name -> new Person(name)).forEach(p -> System.out.println(p));
    }
    
  • Stream收集数据

    public static void main(String[] args) {
        Stream<Integer> stream = Stream.of(1, 2, 3, 1);
    
        //收集到集合
        List<Integer> list = stream.collect(Collectors.toList());
        System.out.println(list);
    
        Stream<Integer> stream2 = Stream.of(1, 2, 3, 1);
        Set<Integer> set = stream2.collect(Collectors.toSet());
        System.out.println(set);
    
        //收集到数组
        Stream<Integer> stream3 = Stream.of(1, 2, 3);
        Object[] objs = stream3.toArray();
        System.out.println(Arrays.toString(objs));
    }
    
    1. 想对批量数据(数组或集合)中每一个数据都进行一系列操作可用Stream流。

    2. 要有终结性的操作才会执行延迟性操作,做了要有收的东西,不然也是白做,浪费时间。

    3. stream流方法返回的仍然是stream,所以是可以链式编程的。

    4. 每一步操作数据都是在往后走的。

    5. 每一个Stream流都是数据集合。

    6. 每个stream流只能被收一次。

三、TimerTask 按时任务

  1. 与时间有关的任务,可以设定多久后才执行,也可以设置执行周期等

    public static void main(String[] args) {
    
        TimerTask tt = new TimerTask() {
            @Override
            public void run() {
                System.out.println("我运行了");
            }
        };
    
        //Timer
        Timer t = new Timer();
        //t.schedule(tt,3000);
        //delay 多久以后开始执行  period 轮巡周期:每隔多久又运行一次
        t.schedule(tt, 1000, 3000);
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值