栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java8 常用新特性

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java8 常用新特性

java8 常用新特性

相信现在大家使用的java版本都是1.8及以上的了吧,对于所说的java8新特性感觉真的不能说新了,毕竟现在java16版本都发布了;

因为在项目中遇到好多代码都是能使用少写的坚决不多谢一个字母,lambda表达式、stream…在项目中全都是这些写法,有必要花点时间巩固一下,不至于看到这些写法都感觉看不懂的样子;

Lambda表达式

它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理;

最简单的Lambda表达式可由参数列表、->符号和语句块组成:

for(Object o: list) { 
   System.out.println(o);
}

可以写成:

//->后可以写任何表达式,计算
list.forEach( e -> System.out.println( e ) );
  • Lambda表达式主要用于替换以前广泛使用的内部匿名类,各种回调;例如Thread类的Runnable;

    不需要显式地把它转成一个Runnable,因为Java能根据上下文自动推断出来:一个Thread的构造函数接受一个Runnable参数,而传入的λ表达式正好符合其run()函数,所以Java编译器推断它为Runnable

Thread oldSchool = new Thread( new Runnable () {    
	@Override
    public void run() {
        System.out.println("common method... ");
    }
} );

等价于:

Thread gaoDuanDaQiShangDangCi = new Thread( () -> {
    System.out.println("lambda method...");
} );
Stream

Java8集合类引入了另一个重要概念:流;一个流通常以一个集合类实例为其数据源,然后在其上定义各种操作。流的API设计使用了管道模式。对流的一次操作会返回另一个流。

Stream类似一个迭代器,在流的过程中,对流中的元素执行一些操作,比如”过滤掉长度大于10的字符串“、“获取每个字符串的首字母”等。

要想操作流,首先要有一个数据源,可以是数组或者集合。每次操作都会返回一个新的流对象,方便进行链式操作,但原有的流对象会保持不变。

流的操作可以分为两种类型:

  • 中间操作,可以有多个,每次返回一个新的流,可进行链式操作。
  • 终端操作,只能有一个,每次执行完,这个流也就用光光了,无法执行下一个操作,因此只能放在最后。

中间操作不会立即执行,只有等到终端操作的时候,流才开始真正地遍历,用于映射、过滤等。通俗点说,就是一次遍历执行多个操作,性能就大大提高了。

1. 创建流
  • 如果是数组,使用Arrays.stream() 或者 Stream.of() 创建流;
  • 如果是集合,使用 stream() 方法创建流;
2. 操作流
  1. 过滤

    通过 filter() 方法可以从流中筛选出想要的元素;

    filter() 方法接收的是一个 Predicate(Java 8 新增的一个函数式接口,接受一个输入参数返回一个布尔值结果)类型的参数

    Stream stream = list.stream().filter(e -> e.contains("java"));
    

    forEach() 方法接收的是一个 Consumer(Java 8 新增的一个函数式接口,接受一个输入参数并且无返回的操作)类型的参数

    stream.forEach(System.out::println);
    
  2. 映射

    使用 map() 方法,把一个流中的元素转化成新的流中的元素;

    map() 方法接收的是一个 Function(Java 8 新增的一个函数式接口,接受一个输入参数 T,返回一个结果 R)类型的参数,此时参数 为 String 类的 length 方法,也就是把 Stream 的流转成一个 Stream 的流。

    Stream stream = list.stream().map(String::length);
    
3. 转换流
  1. collect()方法满足将流转回集合或者数组;

    通过 stream() 方法创建集合的流后,再通过 map(String:length) 将其映射为字符串长度的一个新流,最后通过 collect() 方法将其转换成新的集合。

    List list = list.stream().map(String::length).collect(Collectors.toList());
    
    String name = list.stream().map(e -> e.getName()).collect(Collectors.joining(","));
    

    Collectors 是一个收集器的工具类,内置了一系列收集器实现,比如说 toList() 方法将元素收集到一个新的 java.util.List 中;比如说 toCollection() 方法将元素收集到一个新的 java.util.ArrayList 中;比如说 joining() 方法将元素收集到一个可以用分隔符指定的字符串中。

这篇文章主要写自己在刚工作中经常遇到的一些特性;当然新特性不只这些。完整的文章推荐大家可以看一下:

https://blog.csdn.net/lixiaobuaa/article/details/81099838

https://blog.csdn.net/qing_gee/article/details/105238960

下一篇文章:文件的上传和下载

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/458824.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号