一 简单的stream

  1. parallelStream慎用,除非你知道它内部干了什么
  1. List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
  2. list.parallelStream().forEach(System.out::println);
  3. list.parallelStream().forEachOrdered(System.out::println);
  1. 6
  2. 5
  3. 7
  4. 8
  5. 3
  6. 1
  7. 4
  8. 2
  9. ---------
  10. 1
  11. 2
  12. 3
  13. 4
  14. 5
  15. 6
  16. 7
  17. 8

输出结果

二 简单的stream, collect, sum, count, groupBy, partition

假设有一个这样的对象流:

  1. +----------+------------+-----------------+
  2. | Name | Age | Address |
  3. +----------+------------+-----------------+
  4. | aa | 11 | shanghai |
  5. | bb | 61 | beijing |
  6. | cc | 30 | dalian |
  7. | dd | 90 | dalian |
  8. +----------+------------+-----------------+
  9.  
  10. (1)初始化
  1. List<User> userList = Stream.of(
  2. new User("aa", 11, "shanghai"),
  3. new User("bb", 61, "beijing"),
  4. new User("cc", 30, "dalian"),
  5. new User("dd", 90, "dalian")
  6. ).collect(Collectors.toList());
  1. (2)取某一字段 stream & collect
  1. System.out.println(userList.stream().map(User::getAddress).collect(Collectors.toList()));
  2. System.out.println("---------");
  3. ArrayList<String> arrayList = userList.stream().map(User::getAddress).collect(Collectors.toCollection(ArrayList::new));
  4. System.out.println(arrayList);
  5. System.out.println("---------");
  6. System.out.println(userList.stream().map(User::getAddress).collect(Collectors.joining("@@")));
  1. [shanghai, beijing, dalian, dalian]
  2. ---------
  3. [shanghai, beijing, dalian, dalian]
  4. ---------
  5. shanghai@@beijing@@dalian@@dalian

输出结果

  1. (3)取总和 sum
  1. System.out.println(userList.stream().mapToInt(User::getAge).sum());
  1. 192

输出结果

  1. (3)分组
  1. Map<String, List<User>> addressMap = userList.stream().collect(Collectors.groupingBy(User::getAddress));
    System.out.println(addressMap);
  1. {shanghai=[User[name=aa,address=shanghai]], dalian=[User[name=cc,address=dalian], User[name=dd,address=dalian]], beijing=[User[name=bb,address=beijing]]}

输出结果

  1. (4)分组取和,平均数
  1. Map<String, Long> addressCountMap = userList.stream().collect(Collectors.groupingBy(User::getAddress, Collectors.counting()));
  2. System.out.println(addressCountMap);
  3.  
  4. Map<String, Double> map = userList.stream().collect(Collectors.groupingBy(User::getAddress, Collectors.averagingInt(User::getAge)));
  5. System.out.println(map);
  1. {shanghai=1, dalian=2, beijing=1}
  2. {shanghai=11.0, dalian=60.0, beijing=61.0}

输出结果

  1. (5)分区 分区是一种特殊的分组,结果 map 至少包含两个不同的分组——一个true,一个false
  1. Map<Boolean, List<User>> partitionMap = userList.stream().collect(Collectors.partitioningBy(user -> Objects.equals(user.getAddress(), "beijing")));
  2. System.out.println(partitionMap);
  3. System.out.println(partitionMap.get(true));
  4.  
  5. Map<Boolean, Map<String, Long>> partitionGroupByMap = userList.stream()
  6. .collect(Collectors.partitioningBy(user -> user.getAge() < 70, Collectors.groupingBy(User::getAddress, Collectors.counting())));
  7. System.out.println(partitionGroupByMap);
  1. {false=[User[name=aa,address=shanghai], User[name=cc,address=dalian], User[name=dd,address=dalian]], true=[User[name=bb,address=beijing]]}
  2. [User[name=bb,address=beijing]]
  3. {false={dalian=1}, true={shanghai=1, dalian=1, beijing=1}}

输出结果

  1.  
  1.  

java8 用法小结的更多相关文章

  1. 转载:Hadoop排序工具用法小结

    本文转载自Silhouette的文章,原文地址:http://www.dreamingfish123.info/?p=1102 Hadoop排序工具用法小结 发表于 2014 年 8 月 25 日 由 ...

  2. [No000010]Ruby 中一些百分号(%)的用法小结

    #Ruby 中一些百分号(%)的用法小结 #这篇文章主要介绍了Ruby 中一些百分号(%)的用法小结,需要的朋友可以参考下 what_frank_said = "Hello!"#% ...

  3. C++ typedef用法小结 (※不能不看※)

    C++ typedef用法小结 (※不能不看※) 第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不 ...

  4. 函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结 (转)

    函数fgets和fputs.fread和fwrite.fscanf和fprintf用法小结 字符串读写函数fgets和fputs 一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符 ...

  5. 1:CSS中一些@规则的用法小结 2: @media用法详解

    第一篇文章:@用法小结 第二篇文章:@media用法 第一篇文章:@用法小结 这篇文章主要介绍了CSS中一些@规则的用法小结,是CSS入门学习中的基础知识,需要的朋友可以参考下     at-rule ...

  6. 英语语法最终珍藏版笔记- 21it 用法小结

    it 用法小结 it 在英语中的意思较多,用法较广,现总结如下. 一.it作句子的真正主语 1.it 指前面已经提到过的人或事物,有时指心目中的或成为问题的人或事物,作真正主语. 例如: What’s ...

  7. [转]ssh常用用法小结

    ssh常用用法小结 1.连接到远程主机: 命令格式 : ssh name@remoteserver 或者 ssh remoteserver -l name 说明:以上两种方式都可以远程登录到远程主机, ...

  8. 结构体定义 typedef struct 用法详解和用法小结

    typedef是类型定义的意思.typedef struct 是为了使用这个结构体方便.具体区别在于:若struct node {}这样来定义结构体的话.在申请node 的变量时,需要这样写,stru ...

  9. typedef用法小结

    typedef用法小结- - 注意:本文转自网络,版权归原作者所有. typedef typedef用法小结- - 这两天在看程序的时候,发现很多地方都用到typedef,在结构体定义,还有一些数组等 ...

随机推荐

  1. [CCC 2016] 生命中的圆

    题面 有这么一类题,它让你求一个0/1环经过T轮周围异或过程之后的样子. 周围异或即 a[i][k] = a[i-1][k-1] ^ a[i-1][k+1] ,其中第一维表示轮数,第二维表示位置. 千 ...

  2. 【线性代数】2-4:矩阵操作(Matrix Operations)

    title: [线性代数]2-4:矩阵操作(Matrix Operations) toc: true categories: Mathematic Linear Algebra date: 2017- ...

  3. Centos7安装Redis5.0.3

    1.切换目录 cd tmp 2.下载 wget http://download.redis.io/releases/redis-5.0.3.tar.gz 3.解压,删除压缩包 tar xzf redi ...

  4. 0 - Visualizing and Understanding Convolutional Networks(阅读翻译)

    卷积神经网络的可视化理解(Visualizing and Understanding Convolutional Networks) 摘要(Abstract) 近来,大型的卷积神经网络模型在Image ...

  5. 云闪付个人免签支付用xposed解决强制升级

    云闪付的xposed程序之前用的是6.18的版本,前段时间突然不能用了,提示要升级到最新的7.0版本.之前这个云闪付的个人免签支付程序一直跑的挺好,云闪付也是所有免签支付里面最能跑量的,不甘就这么放弃 ...

  6. 关于Math.random()

    关于 Math.random() ,以前经常搞混淆,这次写个笔记专门记录下: Math.random()  : 返回的是 0~1 之间的一个随机小数0<=r<1,即[0,1); 注意:这里 ...

  7. Flume-Exec Source 监控单个本地文件

    实时监控,并上传到 HDFS 中. 一.Flume 要想将数据输出到 HDFS,须持有 Hadoop 相关 jar 包 若 Hadoop 环境和 Flume 在同一节点,那么只要配置 Hadoop 环 ...

  8. [转]五步git操作搞定Github中fork的项目与原作者同步

    命令如下: git clone xxx-fork.git git remote add xxx xxx.git git fetch xxx git merge xxx/master git push ...

  9. MAC-下安装php-redis扩展

    MAC下安装php-redis扩展   下载php-redis,地址:https://nodeload.github.com/nicolasff/phpredis/zip/master 下载完成得到p ...

  10. zabbix*邮件报警 *用户参数User parameters *定义key值 *Agentd主动模式与被动模式

    邮件报警 #下载安装邮件报警系统wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz yum - ...