• JAVA8之Stream


    流与集合

      集合是一个内存中的数据结构,集合中的每个元素都得先计算出来才能添加到集合中。

      流与集合有以下不同:

       1.无存储. stream不是一种数据结构,它只是某种数据源的一个视图

       2.不可修改.对stream的任何修改都不会影响背后的数据源

               3.可消费性.stream只能被消费一次.

         Collection:集合类接口.

      Collector:收集器,也是接口,对应的工具类是Collectors.

           collect:规约操作,参数为收集器.

    流操作

      【中间操作】对流进行处理后,会返回另一个流

    操作 类型 返回类型 操作参数 函数描述符 描述
    filter 中间 stream<T> Predicate<T> T -> boolean  
    map 中间 stream<R> Function<T,R> T -> R  
    limit(n) 中间 stream<T>      
    sorted 中间 stream<T> Comparator<T> (T,T) -> R  
    distinct 中间 stream<T>      
    skip(n) 中间 stream<T>     返回一个扔掉了前n个元素的流,和limit互补

      【终端操作】会从流的流水线生成结果

    操作 类型 目的
    forEach 终端 消费流中的每个元素并对其应用Lambda
    count 终端 返回流中元素的个数
    collect 终端 把流归约成一个集合

    流的扁平化

      flatMap方法可以把一个流中的每个值都换成另一个流,然后把所有的流连接起来成为一个流

      flatMap参数:Function<? super T,? extends Stream<? extends R>>

      

     构建流

      1.由值创建流

      Stream<String> stream = Stream.of("Java8","Lambda");

       2.由数组创建流

      

       3.由文件生成流    

    package stream;
    
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.Arrays;
    import java.util.Optional;
    import java.util.stream.Stream;
    
    public class FilesLinesStreamTest {
        public static void main(String[] args) {
            String fileUrl = "F:\file\123.txt"; 
            //从path对应的文件中读取所有内容,并按行分割,返回一个 Stream<String>
            //try-with-resources语句可以自动调用资源的close方法
            try(Stream<String> lines = Files.lines(Paths.get(fileUrl))) {
                Optional<String> opt = lines.flatMap(line -> Arrays.stream(line.split(" "))).findFirst();
                System.out.println(opt.orElse("no data"));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    WebDriverException:Message:'geckodriver'executable needs to be in Path
    如何使用NSDL玩转微信跳一跳
    python多线程下载网页图片并保存至特定目录
    sql之将一个表中的数据注入另一个表中
    sql之分区域分段统计
    sql之分段统计
    ajax二次封装之异步加载
    vue组件之echarts报表
    url查询参数解析
    template.js 数据渲染引擎
  • 原文地址:https://www.cnblogs.com/ryjJava/p/12324457.html
Copyright © 2020-2023  润新知