首页 > 编程语言 >Java8新特性之Stream流

Java8新特性之Stream流

时间:2023-07-17 14:44:33浏览次数:31  
标签:Stream stream System 特性 forEach println Java8 out

Stream流感觉是我本人听的最多的Java8新特性了,但我感觉听得多,真要将他的用法,还是讲不出来,看来还是用的太少了。

  1. stream流的创建
  • 通过Stream.of()静态方法创建
// of为Stream的静态方法
Stream<String> strStream = Stream.of("hello", "java8", "stream");
// 或者使用基本类型流
IntStream intStream = IntStream.of(1, 2, 3);
  • 通过集合.stream创建
  • 通过数组创建 Arrays.stream
  • 迭代器创建
// 生成100个奇数,加上limit否则就是无限流了
Stream<Integer> stream = Stream.iterate(1, n -> n + 2).limit(100);
stream.forEach(System.out::println);
  • 用IO
// 获取指定路径下文件信息,list方法返回Stream类型
Stream<Path> pathStream = Files.list(Paths.get("/"));
  1. Stream流的常用操作
  • .Map()
    将流中每个数据映射出来
// 初始化一个不可变字符串
List<String> words = ImmutableList.of("hello", "java8", "stream");
// 计算列表中每个单词的长度
List<Integer> list = words.stream()
        .map(String::length)
        .collect(Collectors.toList());
// output: 5 5 6
list.forEach(System.out::println);
  • .flatMap()
    将流中每个元素取出来转成另外一个输出流,再通过扁平化形成一个流
Stream<String> strStream = words.stream()
        .map(word -> word.split("-"))
        .flatMap(Arrays::stream)
        .distinct();
// output: hello java8 stream
strStream.forEach(System.out::println);

因为.split会将其拆分为String[]故使用flatMap

  • filter()
    顾名思义,通过条件过滤流数据
  • 终端操作,即将stream流转换成具体的返回值
// 找出最大的值
List<Integer> integers = Arrays.asList(6, 20, 19);
integers.stream()
        .max(Integer::compareTo)
        .ifPresent(System.out::println);
// output: 20
  1. Stream流的天坑
  • stream流不能重复消费
List<String> strings = Arrays.asList("hello", "java8", "stream");
Stream<String> stream = strings.stream();
stream.forEach(System.out::println); // ok
stream.forEach(System.out::println); // IllegalStateException
  • Stream流的数据不可中途修改
List<String> strings = Arrays.asList("hello", "java8", "stream");
// expect: HELLO JAVA8 STREAM WORLD, but throw UnsupportedOperationException
strings.stream()
        .map(s -> {
            strings.add("world");
            return s.toUpperCase();
        }).forEach(System.out::println);

stream流我个人理解是类似于lambda语句的高大上简洁代码格式,看的人赏心悦目

标签:Stream,stream,System,特性,forEach,println,Java8,out
From: https://www.cnblogs.com/haipali/p/17560049.html

相关文章

  • Java8新特性之Optional类的妙用
    该新特性也是翻java八股翻到的,感觉有点小用,所以记录一下通常我们在调用方法获取参数时,常常会出现要避免空指针,从而进行一系列判断非空的代码,这部分十分冗长且啰嗦还重复,故可以使用一下今天的主角:Java.util.Optional类创建方式共有三种方式供您选择直接创建空的Optional对......
  • Java语言的特性
    面向对象:Java是一种纯面向对象的编程语言,这意味着Java中所有的代码都是以对象为基础的。在Java中,你可以通过定义类来创建对象,这些对象可以具有状态(属性)和行为(方法)。Java支持继承、多态和封装等面向对象的概念,使代码更加清晰、易于扩展和维护。平台无关性:Java的平台无关性......
  • 【IP】vivado中IP核的Core Container特性
    一、XCI和XCIX格式文件在Vivado中生成IP核时,一般默认是对应的IP核文件夹会生成在工程目录的.srcs/sources_1/ip路径下。这个文件夹包含了所有与该IP核相关的文件,最主要的是XCI文件,其中包含了用户配置的相关信息。 Vivado还提供了CoreContainer特性,可以将所有与IP相关的文件......
  • JDK1.8 新特性
    JDK1.8都有哪些新特性?JDK1.8有不少新特性,我们经常接触到的新特性如下:                                      JDK1.8主要新特性接口默认方法:Java8允许我们给接口添加一个非抽象的方法实现......
  • JDK有用的新特性-Switch
    目录箭头表达式,新的case标签yeild返回值JavaRecordSwitch的三个方面,参考:JEP361支持箭头表达式支持yied返回值支持JavaRecord箭头表达式,新的case标签Switch新的语法,caselabel->表达式|throw语句|blockcaselabel_1,label_2,...,label_n->expressio......
  • JDK有用的新特性-Java Record
    目录JavaRecordRecord使用InstanceMethods静态方法StaticMethodRecord的构造方法step1:紧凑和定制构造方法Record与与LombokRecord实现接口LocalRecord嵌套Recordinstanceof判断Record类型总结JavaRecordJava14中预览的新特性叫做Record,在Java中,Record是一......
  • java8 LocalData/Time
    ISO_DATE_TIMELStringtimeString=LocalDateTime.now().atOffset(ZoneOffset.ofHours(8)).format(DateTimeFormatter.ISO_DATE_TIME);System.out.println(timeString);//2023-07-14T18:28:23.056+08:00增加与减小LocalDatedate=LocalDate.now().minusMonths(1);LocalDa......
  • java拦截器获取POST请求体后Controller异常Required request body is missing OR Stre
    解决办法参考文档:https://blog.csdn.net/qierkang/article/details/88544691springboot拦截器获取POST请求体后导致Controller中@RequestBody参数异常RequiredrequestbodyismissingORStreamclosed.1.为什么会报这个错?因为http的body只能读取一次。2.为什么body设计为只......
  • vim E447: cannot find file iostream in path
    查看c/c++文件中的头文件,可以使用gf跳转,但是有时会出现Error447:notfoundinpath1,命名模式中输入,临时修改:setpath=.,/usr/include,,/usr/include/c++/*/2,修改vimrc增加setpath+=.,/usr/include,,/usr/include/c++/*/......
  • java8xiazai
    Java8下载文件在Java8中,文件下载是一个常见的任务。无论是从互联网下载文件还是从本地服务器下载文件,Java8都提供了一些强大的功能来处理这些任务。本文将介绍如何使用Java8来下载文件,并提供一些示例代码来帮助您更好地理解。使用URLConnection下载文件URLConnection是Java......