Java新特性

一、Java新特性

1.1 Lambda表达式

  • 概念:特殊的匿名内部类,语法更简洁,允许把函数作为一个方法的参数,将代码像数据一样传递
  • 基本语法:
	<函数式接口> <变量名> = (参数1,参数2)->{
		//方法体
	};
  • 注意事项:
    * 形参列表的数据类型会自动推断
    * 如果形参列表为空,只需保留()
    * 如果形参只有一个,()可以省略,只需要参数的名称即可
    * 如果执行语句只有一句,且无返回值,()可以省略,若有返回值,则若想省略{},必须同时省略return,且执行语句也保证只有一句
    * Lambda不会生成一个单独的内部类文件

1.2 函数式接口

  • 如果一个接口只有一个抽象方法,则该接口称之为函数式接口
  • 函数式接口可以使用Lambda表达式,Lambda表达式会被匹配到这个抽象方法上
  • 可以使用@FunctionalInterface注解检测接口是否符合函数式接口
  • 常见的函数式接口:
    * 消费型接口:Comsumer 有参数,无返回值
	// 消费型接口:有参数,无返回值
	Consumer<String> consumer = s -> System.out.println(s);
	consumer.accept("消费型接口");
	* 供给型接口:Supplier<T> 无参数,有返回值
	// 供给型接口:无参数,有返回值
	Supplier<String> supplier = () -> "供给型接口";
	System.out.println(supplier.get());

	* 函数型接口:Function<T,R> 有参数,有返回值
	// 函数型接口:有参数,有返回值
	Function<Integer, Integer> function = a -> 2 * a;
	System.out.println(function.apply(10));
	* 断言型接口:Predicate<T> 有参数,返回值为boolean类型
	// 断言型接口:有参数,返回boolean类型
	Predicate<Integer> predicate = a -> a > 0;
	System.out.println(predicate.test(5));

1.4 方法引用

  • 方法引用是Lambda表达式的一种简写形式。如果Lambda表达式方法体中只是调用一个特定的已经存在的方法,则可以使用方法引用
	// 对象::实例方法
	Consumer<String> consumer = System.out::println;
	consumer.accept("666");

	// 类名::静态方法
	Comparator<Integer> comparator = Integer::compare;
	System.out.println(comparator.compare(25, 35));

	// 类名::new
	Supplier<Student> supplier = Student::new;
	System.out.println(supplier.get());

	// 类名::实例方法
	Function<String, String> function = String::toUpperCase;
	System.out.println(function.apply("abc"));

1.5 Stream API

  • 流(Stream)与集合类似,但集合中保存的是数据,而Stream中保存对集合或数组数据的操作
  • 特点:
    * Stream自己不会存储元素
    * Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream
    * Stream操作是延迟执行的,会等到需要结果的时候才执行
  • 使用步骤:
    * 创建:
    * 通过Collection对象的stream()或parallelStream()方法
    * 通过ARRAYrray类的stream()方法
    * 通过Stream接口的of()、itrate()、generate()方法
    * 通过IntStream、LongStream、DoubleStream接口中的of、range、rangeClosed方法
  • 中间操作:
    * 在一个或多个步骤中,将初始Stream转化到另一个Stream的中间操作
    * filter、limit、skip、distinct、sorted
    * map
    * parallel
  • 终止操作:
    * 使用一个终止操作来产生一个结果。该操作会强制之前的延迟操作立即执行,在此之后,该Stream就不能使用了
    * forEach、min、max、count
    * reduce、collect

1.6 新的日期API

  • 之前时间API存在问题:线程安全问题、设计混乱
  • 本地化日期时间API:
    * LocalDate
    * LocalTime
    * LocalDateTime
  • Instant:时间戳
  • ZoneId:时区
  • DateTimeFormatter:格式化类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值