jdk8stream创建/中间操作/终止操作api

    public static void main(String[] args) {//流的创建:可以通过Array/List/Set的stream(),或Stream类的静态方法builder/generate/of等方法Lists.newArrayList(1,2,3).stream().forEach(System.out::println);System.out.println(Stream.builder().add(1).add(2).add(3).build().collect(Collectors.toList()));System.out.println(Stream.iterate(1, i -> ++i).limit(3).collect(Collectors.toList()));//无限流,seed种子,必须limit否则0Stream.generate(() -> Math.random()).limit(3).forEachOrdered(System.out::println);//::是对拉姆达的进一步简化//流的中间操作:包括filter/distinct/sorted/unordered/skip/limit/peek/map/flatmap等,返回仍是流(必须有终止操作否则中间步骤不执行,parallelStream多核CPU并行操作流排序无效)System.out.println(Lists.newArrayList(1, 3, 3, 2, 4, 5, 8, 7, 6).stream().filter(i -> {System.out.println(i);return  i != 1;}).distinct().sorted((o1, o2) -> o1 - o2).skip(1).limit(3).map(o -> ++o).collect(Collectors.toList()));System.out.println(Arrays.asList("aa", "bb", "cc", "dd").stream().peek(s -> System.out.println(s)).collect(Collectors.toList()));//peek用于debug,类似map,但无返回Stream.of("a,a", "b,b", "c,c", "d,d").flatMap(s ->Stream.of(s.split(","))).forEach(ss -> System.out.println(ss));//flat返回的是流,这些流合并为一个整体流Stream.of("a,a", "b,b", "c,c", "d,d,d").map(s ->s.split(",")).forEach(arr -> {System.out.println(arr.length); });//map返回的是基本数据类型//流的终止:如非collect/toArray/count/forEach/allMatch/anyMatch/nonMatch/findAny/findFirst/max/min/reduceSystem.out.println(Stream.of("aa", "bb", "cc", "dd").allMatch(Objects::nonNull));System.out.println(Stream.of("aa", "bb", "cc", null).anyMatch(s -> StringUtils.isBlank(s)));System.out.println(Stream.of("aa", "bb", "cc", null).findFirst().get());System.out.println(Stream.of("aa", "bb", "cc", null).map(s -> {System.out.println(s);return s;}).reduce((str1, str2) -> str1 + str2).get());//聚合操作,类似递归,如(((e1+e2)+e3)+e4)System.out.println(Stream.of("aa", "bb", "cc", null).map(s ->s+=s).reduce("initVal",(str1, str2) -> str1 + str2));//指定初始值//流的终止:特别的统计APIList<Goods> goods = Lists.newArrayList(new Goods("商品1", 1, 1),new Goods("商品2", 2, 2),new Goods("商品3", 3, 3));Double totalPrice = goods.stream().map(item -> item.getPrice() * item.getNum()).reduce((p1, p2) -> p1 + p2).get();System.out.println(totalPrice);//14元DoubleSummaryStatistics statistics = goods.stream().mapToDouble(item -> item.getPrice() * item.getNum()).summaryStatistics();System.out.println("商品种数:"+statistics.getCount());System.out.println("最高花费:"+statistics.getMax());System.out.println("平均花费:"+statistics.getAverage());System.out.println("总花费:"+statistics.getSum());//14元}

并行stream API的适用场景测试

public class Test {public static void main(String[] args) throws Exception {//准备一个数据源集合,测试将集合元素拼接一个字符放入另一个集合ArrayList<String> resourceList = new ArrayList<>();for (int i = 0; i < 10; i++) {resourceList.add(i + "");}//普通处理。。。。。。。。。。。。。。。。。。。。。。。。。。。long t1 = System.currentTimeMillis();ArrayList<String> s1 = new ArrayList<>();for (String s : resourceList) {Thread.sleep(500);//模拟此处有0.5s的其它操作s1.add(s + "普通测试");}long t2 = System.currentTimeMillis();//JKD8 parallelStream处理。。。。。。。。。。。。。。。。。。。long t3 = System.currentTimeMillis();List<String> s2 = resourceList.parallelStream().map(e -> {try {Thread.sleep(500);//模拟此处有0.5s的其它操作} catch (InterruptedException e1) {e1.printStackTrace();}return e + "Stream测试";}).collect(Collectors.toList());long t4 = System.currentTimeMillis();System.out.println(t2 - t1);System.out.println(t4 - t3);//结论:1.多次测量输出:5000:1500;//     2.当业务的集合迭代处理过程中有较耗时操作时,利用多核CPU及JDK8 并行api,能明显提升效率;//     3.简单集合迭代,无耗时操作不推荐stream}

JDK8 stream API,并行API的适用场合相关推荐

  1. jdk8 stream API

    jdk8 stream API map Reduce的用法 reduce根据输入的list值,以及计算规则,进行计算,计算时可以分配多cpu. import lombok.AllArgsConstru ...

  2. JDK8新特性简介、Lambda表达式、Stream流常用api介绍

    JDK8新特性简介.Lambda表达式.Stream流常用api介绍 接口 Java1.8前接口中是不允许有普通方法的,在Java1.8后允许接口中有普通方法,只需要加上default关键字即可: J ...

  3. Java 8中新的并行API:Glitz和Glamour的背后

    我是一个出色的多任务处理者. 即使我在写这篇文章,我仍然可以为昨天在一个大家都对我陌生的聚会上发表的言论感到尴尬. 好消息是,我并不孤单– Java 8在多任务处理方面也相当出色. 让我们看看如何. ...

  4. JDK8 Stream 效率如何?

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达今日推荐:推荐19个github超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 作者:Al_assad 链接: ...

  5. jdk8 stream

    JDK8 Stream详解 概念 Stream是Java8 API的新成员,它允许以声明性方式处理数据集合 . 特点 (1)代码简洁:函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告 ...

  6. JDK8 Stream 数据流效率分析

    JDK8 Stream 数据流效率分析 Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util.stream (这个包里有若干流类型: Stream<T> ...

  7. ecshop /api/client/api.php、/api/client/includes/lib_api.php SQL Injection Vul

    catalog 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述 ECShop存在一个盲注漏洞,问题存在于/api/clien ...

  8. 架构师之路 — API 经济 — API 实现方式

    目录 文章目录 目录 API 实现方式 Design-First(设计优先) Code-First(编码优先) API 设计规范 为用户设计 API 识别 API 的目标 Mock API Serve ...

  9. 云小课 | 使用ROMA API,API管理从此不用愁

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:ROMA API致 ...

最新文章

  1. android 开发环境简书,Android Studio 开发环境快速搭建
  2. 计算机专业技术人员工作总结,计算机教师专业技术年终工作总结及计划范文模板.docx...
  3. PHP完整的一次请求过程:请求 dns nginx监听 转发给php-fpm worker处理 返给nginx
  4. python中与label类似的控件是_Python高级进阶教程021期 pyqt5label控件进阶使用,设置兄弟控件,广告植入...
  5. 怎样避免每次都解释大量指令?
  6. 【嵌入式】C语言高级编程-container_of宏(04)
  7. P3312 [SDOI2014]数表(离线 + 树状数组前缀和优化)
  8. windows 2008r2文件服务器部分用户访问不了_苹果设备如何访问 Windows 文件共享?...
  9. 【iCore3应用】基于iCore3双核心板的编码器应用实例
  10. python处理excel的优势-SAS、R、SPSS、python、excel五大软件的比较优势分析
  11. php static 关键字
  12. R2B fpga flow script
  13. 私藏的18个黑科技网站
  14. android模拟qq登陆,模拟qq登录
  15. 棋牌游戏服务器架构设计
  16. IBM服务器raid5崩溃数据恢复方法
  17. UEditor自定义工具栏图标
  18. http_proxy设置
  19. 今天是个好日子,本站第248个社区 派森特给站 开张了
  20. 嘉立创 EDA 专业版原理图绘制

热门文章

  1. 大学生计算机技能应用大赛含金量,计算机设计大赛含金量
  2. matlab求同构数
  3. vue.js请求数据
  4. 【mongodb】python操作mongodb
  5. 快速掌握python3语法_【Python】Python3基本语法入门学习
  6. 【Qt作业】利用帧动画实现运动的小人
  7. 太空飞行计划问题 网络流24题(2/24)
  8. 关于刚安装的新系统的一些设置
  9. win10任务栏显示“中/英“语言标识
  10. Mysql 默认密码