Lambda表达式/Stream流

文章详细介绍了Java8的Lambda表达式的特性,如简洁性、非侵入性和可读性,并展示了其语法。同时,讲解了Stream的工作流程,包括创建流、中间操作和终止操作。此外,还讨论了新的时间API,如LocalDateTime、DateTimeFormatter和时区管理,以及如何进行时间转换。
摘要由CSDN通过智能技术生成
Lambda表达式特点:
  1. 简洁性:省去了繁琐的方法声明和匿名内部类的写法,使得代码更加紧凑。
  2. 非侵入性:不需要修改现有的接口或类,可以直接在现有的函数式接口上使用 Lambda 表达式。
  3. 可读性:将重点放在了核心逻辑上,减少了冗余代码,使得程序更易于理解和维护。
  4. 函数式编程:支持函数式编程思想,可以以函数作为参数传递,支持闭包操作。

语法:

(形参列表) -> {方法体};

注意:
    当一个接口或一个抽象类只有一个抽方法时才可使用
    当重写的方法中有形参,此时可以忽略形参的数据类型不写
    当重写的方法中有形参,并且只有一个参数,此时可以忽略小括号不写
    当方法体中只有一行代码时,可以忽略大括号不写
    当方法体中只有一行代码,并且该代码是用于返回值,此时必须省略return不写
    当形参的数据使用final修饰,此时不能省略数据类型不写

方法引用:

在lambda表达式的基础上再次优化

语法

对象::实例方法
类::静态方法
类::实例方法
类::new

Stream工作流

使用步骤:

1.创建流:

可以由多种方式来创建(集合,数组,Stream.of()方法,Stream.iterate() 或 Stream.generate() )

2.中间操作:

中间操作是对流进行处理和转换的操作,可以有多个中间操作,每个中间操作都会返回一个新的流。常见的中间操作包括:

  • filter():过滤流中的元素。
  • map():对流中的元素进行映射转换。
  • distinct():去除流中的重复元素。
  • sorted():对流中的元素进行排序。
  • limit():限制流中元素的数量。
  • skip():跳过流中的前几个元素。
  • flatMap():将流中的每个元素转换为流,并将其扁平化为一个流。

3.终止操作:

终止操作是对流进行最终处理的操作,只能有一个终止操作,执行终止操作后,流将不再可用。常见的终止操作包括:

  • forEach():对流中的每个元素执行指定的操作。
  • collect():将流中的元素收集到一个集合或结果容器中。
  • reduce():利用指定的操作将流中的元素进行归约,返回归约结果。
  • count():返回流中的元素数量。
  • min()、max():返回流中的最小值或最大值。
新时间API

LocalDate
LocalDateTime
    作用:代替Date
    方法:
        now():获取当前时间,静态方法
        of():获取指定时间,静态方法
        getYear():获取年
        getMonthValue():获取月
        getDayOfMonth():获取日
        plusXXX():添加
        minusXXX():减少
        atZone(ZoneId zoneId):将时间转换为指定时区的时间
        format(DateTimeFormatter dtf):将时间转换为指定格式的字符串
        parse(CharSequence text, DateTimeFormatter formatter):将指定格式的字符串转换为时间
    代码:
        //1创建本地时间
        LocalDateTime localDateTime=LocalDateTime.now();
        //LocalDateTime localDateTime2=LocalDateTime.of(year, month, dayOfMonth, hour, minute)
        System.out.println(localDateTime);
        System.out.println(localDateTime.getYear());
        System.out.println(localDateTime.getMonthValue());
        System.out.println(localDateTime.getDayOfMonth());

        //2添加两天
        LocalDateTime localDateTime2 = localDateTime.plusDays(2);
        System.out.println(localDateTime2);

        //3减少一个月
        LocalDateTime localDateTime3 = localDateTime.minusMonths(1);
        System.out.println(localDateTime3);
    
DateTimeFormatter
    作用:代替SimpleDateFormat
    方法:
        ofPattern("时间格式"):设定时间格式
    代码:
        DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyyMMdd");
        ExecutorService pool = Executors.newFixedThreadPool(10);
        Callable<LocalDate> callable=new Callable<LocalDate>() {
            @Override
            public LocalDate call() throws Exception {
                return LocalDate.parse("20200525",dtf);
            }
        };
        List<Future<LocalDate>> list=new ArrayList<>();
        for(int i=0;i<10;i++) {
            Future<LocalDate> future=pool.submit(callable);
            list.add(future);
        }
        for (Future<LocalDate> future : list) {
            System.out.println(future.get());
        }
        pool.shutdown();

ZoneId:时区
    方法:
        public static Set<String> getAvailableZoneIds():获取所有时区
        public static ZoneId systemDefault():获取系统默认时区

Instant:时间戳
    方法:
        public static Instant now():获取当前时间
        public long toEpochMilli():获取当前时间与1970年1月1日00:00:00:000的时间差,单位毫秒
        public Instant plusSeconds(long secondsToAdd):减数当前时间的秒数

时间转换:
    Date --->Instant---->LocalDateTime
    代码:
        Date date=new Date();
        Instant instant = date.toInstant();            
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
        
    LocalDateTime --->Instant---->Date
    代码:
        Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
        Date from = Date.from(instant);
        System.out.println(from);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值