zoukankan      html  css  js  c++  java
  • java stream Api

    Stream的简单使用

    Stream的使用分为两种类型:

      1. Intermediate,一个Stream可以调用0到多个Intermediate类型操作,每次调用会对Stream做一定的处理,返回一个新的Stream,这类操作都是惰性化的(lazy),就是说,并没有真正开始流的遍历。 
        常用操作:map (mapToInt, flatMap 等)、 filter、 distinct、 sorted、 peek、 limit、 skip、 parallel

      2. Terminal,一个Stream只能执行一次terminal 操作,而且只能是最后一个操作,执行terminal操作之后,Stream就被消费掉了,并且产生一个结果。 
        常用操作:forEach、 forEachOrdered、 toArray、 reduce、 collect、 min、 max、 count、 anyMatch、 allMatch、 noneMatch、 findFirst、 findAny

    /********** Intermediate **********/

    //filter 过滤操作

    streamArr.filter(str -> str.startsWith("a"));

    //map 遍历和转换操作

    streamArr.map(String::toLowerCase);

    //flatMap 将流展开

    List<String> list1 = new ArrayList<>();

    list1.add("aa");

    list1.add("bb");

    List<String> list2 = new ArrayList<>();

    list2.add("cc");

    list2.add("dd");

    Stream.of(list1,list2).flatMap(str -> str.stream()).collect(Collectors.toList());

    //limit 提取子流

    streamArr.limit(1);

    //skip 跳过

    streamArr.skip(1);

    //peek 产生相同的流,支持每个元素调用一个函数

    streamArr.peek(str - > System.out.println("item:"+str));

    //distinct 去重

    Stream.of("aa","bb","aa").distinct();

    //sorted 排序

    Stream.of("aaa","bb","c").sorted(Comparator.comparing(String::length).reversed());

    //parallel 转为并行流,谨慎使用

    streamArr.parallel();

    /********** Terminal **********/

    //forEach streamArr.forEach(System.out::println);

    //forEachOrdered如果希望顺序执行并行流,请使用该方法

    streamArr.parallel().forEachOrdered(System.out::println);

    //toArray 收集到数组中

    streamArr.filter(str -> str.startsWith("a")).toArray(String[]::new);

    //reduce 聚合操作

    streamArr.reduce((str1,str2) -> str1+str2);

    //collect 收集到List中

    streamArr.collect(Collectors.toList());

    //collect 收集到Set中 streamArr.collect(Collectors.toSet());

    //min 取最小值? IntStream.of(1,2,3,4).min();

    Stream.of(arr).min(String::compareTo);

    //max 取最大值?

    IntStream.of(1,2,3,4).max();

    Stream.of(arr).max(String::compareTo);

    //count 计算总量?

    streamArr.count();

    //anyMatch 判断流中是否含有匹配元素

    boolean hasMatch = streamArr.anyMatch(str -> str.startsWith("a"));

    //allMatch 判断流中是否全部匹配

    boolean hasMatch = streamArr.allMatch(str -> str.startsWith("a"));

    //noneMatch 判断流中是否全部不匹配

    boolean hasMatch = streamArr.noneMatch(str -> str.startsWith("a"));

    //findFirst 找到第一个就返回 streamArr.filter(str -> str.startsWith("a")).findFirst();

    //findAny 找到任意一个就返回 streamArr.filter(str -> str.startsWith("a")).findAny();

  • 相关阅读:
    JDBC的步骤
    Java异常
    两个init方法的区别
    迭代器、foreach循环、泛型集合
    servlet的生命周期
    集合类对比
    在servlet中的中文乱码,相对路径和绝对路径
    【转】学习使用Jmeter做压力测试(一)--压力测试基本概念
    【转】jmeter压力测试
    【转】配置Jmeter的自定义参数
  • 原文地址:https://www.cnblogs.com/zxf330301/p/8893382.html
Copyright © 2011-2022 走看看