Java8主要特性还不熟悉?铁汁一起学起来(学习笔记)

虽然Java已经发行了Java14,但在Java开发中用得最多的也就Java8了,而且现在准确来讲Java8中的一些特性也算不上新特性,但是掌握好运用其特性,能过让我们写出更优雅的代码👨‍💻

用Java8如何写出优雅的代码?

那得从熟悉Java8特性开始,Java8引入的一个核心概念是函数式接口。通过在接口里面添加一个抽象方法,这些方法可以直接从接口中运行。如果一个接口定义个唯一一个抽象方法,那么这个接口就成为函数式接口。同时引入一个新的注解:@FunctionalInterface,表示这个接口是函数式接口,而且添加了这个接口后只允许有一个抽象方法,否则编译器会报错。

Lambada表达式

函数式接口的重要属性是,我们能够使用Lambda实例化它们。Lambda表达式可以将函数作为方法参数,或者将代码作为数据对待。

  • 优点: 可读性强,而且使并行操作大集合变得方便
    它是由三部分组成的:第一部分为一个扩号内用逗号分隔的形式参数;第二部分就是箭头符号->;第三部部分就是表达式或者代码块
    🌰:(int a,int b) -> {return System.Out.Println(a+b);}
    也可使用简写:
  1. 省略参数类型:条件是Lambda表达式可以根据上下文环境推断出参数类型。
    🌰:(a,b)->{return a+b;}
  2. 省略参数小括号:条件是Lambda表达式中只有一个参数。
    🌰:(int a) ->{ return a+a;}
  3. 省略return和大括号:条件是Lambda表达式体中只有一条语句。
    🌰:a -> a*a;

除此之外,由于要使用Lambda表达式,需要定义一个函数式接口,往往会充斥着过量的函数式接口,所以Java8的java.util.function中增加了不少的函数式通用接口

  • Function<T,R>:将T作为数,返回R作为输出,还包含了和其他函数组合的默认方法。
  • Predicate<T>:将T作为输入,返回一个布尔值作为输出,该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(与、或、非)。
  • Consumer<T>:将T作为输入,不返回任何内容,表示在单个参数上的操作。

集合之流式操作

Java8引入了流式操作(Stream),通过该操作可以实现对集合的并行处理和函数式操作。根据操作返回的结果不同,流式操作分为中间操作和最终操作。最终操作返回的是特定类型的结果,而中间操作返回流本身,这样可以把多个操作依次串联起来,流式操作实现了集合的过滤、排序、映射等功能。

  • Stream和Collection的区别在于:前者主要是有关计算的,面向CPU,而后着主要是静态内存数据结构,主要面向内存。
  • Stream有串行的流和并行的流,它们之间可以相互切换;通过stream.sequential()返回串行的流,通过stream.parallel()返回并行的流
  • 中间操作:返回流本身
  • fileter():对元素进行过滤;
  • sorted():对元素排序;
  • map():元素的映射;
  • distinct():去除重复元素;
  • subStream():获取子Stream等;
  • 终止操作:返回特定的结果
  • forEach():对每个元素做处理;
  • toArray():把元素到处到数组;
  • findFirst(): 返回第一个匹配的元素;
  • anyMatch():是否有匹配的元素等。

Java8新增的日期API

新的java.time中包含了所有关于时钟(Clock),本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类

  • 应用🌰:
	//LocalDate
	LocalDate localDate = LocalDate.now(); //获取本地日期
	localDate = LocalDate.ofYearDay(2014, 200); // 获得 2014 年的第 200 天 
	System.out.println(localDate.toString());//输出:2014-07-19
	localDate = LocalDate.of(2014, Month.SEPTEMBER, 10); //2014 年 9 月 10 日 
	System.out.println(localDate.toString());//输出:2014-09-10
	//LocalTime
	LocalTime localTime = LocalTime.now(); //获取当前时间
	System.out.println(localTime.toString());//输出当前时间
	localTime = LocalTime.of(10, 20, 50);//获得 10:20:50 的时间点
	System.out.println(localTime.toString());//输出: 10:20:50
	//Clock 时钟
	Clock clock = Clock.systemDefaultZone();//获取系统默认时区 (当前瞬时时间 )
	long millis = clock.millis();//

参考链接:Java8新特性概述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值