java8 stream

转载:猿天地 链接:http://cxytiandi.com/blog/detail/2220

Stream 作为 Java 8 的一大亮点,我个人是非常喜欢用的,用起来爽多了。

定义Stream

可以通过of来定义stream,也可以通过集合来转成stream。

Stream<String> stream = 
    Stream.of("java", "css", "php");
stream = Arrays.asList(
    "张三", "张三丰", "张大佛爷", "张").stream();

也可以使用generate产生无限数量的stream,当然可以用limit方法限制

下面的语句将产生无数的随机数字,将一直循环下去

Stream<Double> dsStream = 
    Stream.generate(Math::random);
dsStream.forEach(System.out::println);

使用Stream

filter方法的使用,filter顾名思义,过滤的作用,怎么过滤呢?

比如说我们有个姓名的集合,想要统计出集合里名字的字数大于1的数量有多少?

首先是不使用stream的传统方法

List<String> contents = 
         Arrays.asList("张三", "张三丰", "张大佛爷", "张");
int count = 0;
for (String con : contents) {
  if(con.length() > 1) {
      count++;
  }
}
System.out.println(count);

下面是使用stream之后的代码,一行就搞定了,在filter方法里用lambda表达式进行过滤,然后用count方法统计出符合条件的数量。

long new_count = contents.stream()
      .filter(con -> con.length() > 1).count();
System.out.println(new_count);

当然如果你的数据量比较多,而你希望统计的速度更快时,可以使用并行处理的stream来操作。

new_count = contents.parallelStream()
     .filter(con -> con.length() > 1).count();

map方法的使用

map其实就是将stream中的数据映射成 output Stream 的另外一个元素。全部循环的过一遍。

使用map可以将stream中的值都转成大小写,如果用List的话还得循环变量然后取toUpperCase()

Stream<String> stream = 
    Stream.of("java", "css", "php");
stream.map(String::toUpperCase)
    .forEach(System.out::println);

flatMap的使用和map一样

不同的点在于flatMap是将多个stream中的多个数据集合连接起来成为一个最终的stream。

Stream<List<Integer>> number_stream =
Stream.of(
   Arrays.asList(10),
   Arrays.asList(22, 33),
   Arrays.asList(44, 55, 66)
);
number_stream.flatMap((c) -> c.stream())
   .forEach(System.out::println);

最终的结果就变成了Stream 输出结果就是10,22,33,44,55,66

本文分享自微信公众号 - 猿天地(cxytiandi)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-09-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一个MySQL时间戳精度引发的血案

    最近工作中遇到两例mysql时间戳相关的问题,一个是mysql-connector-java和msyql的精度不一致导致数据查不到;另一例是应用服务器时区错误导...

    猿天地
  • Netty 断线重连解决方案

    本篇文章是Netty专题的第七篇,前面六篇文章如下: 高性能NIO框架Netty入门篇 高性能NIO框架Netty-对象传输 高性能NIO框架Netty-整合k...

    猿天地
  • Kitty-Cloud中的编码规范

    https://github.com/yinjihuan/kitty-cloud[1]

    猿天地
  • 【数据库评测报告】第三期:innodb、tokudb压缩性能

    这一期的数据库测评报告让咱们一起来讨论下数据压缩这一话题。

    迪B哥
  • vlookup函数应用

    第三步 使用vlookup '=VLOOKUP(A1,A\(1:\)A19,1,0)'

    hankleo
  • 在Linux上用Eclipse写C++程序

    我厂很多同学使用VC在windows上编写linux的C/C++程序,然后再传的开发服务器上,然后再编译和调试。如果有修改,可能会直接用vi去改了,然后再把源代...

    韩伟
  • linux k8s权威踩坑指南

    解决:无法连接数据库,书籍中mysql是latest,但是当时是15-16年左右,原来jdbc驱动可用,但是现在yaml文件中没有版本号,默认依然是latest...

    葫芦
  • CCF 最优灌溉

    问题描述   雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉。   为了灌溉,雷雷需要建立一些...

    用户1148523
  • 图像分割算法之FCNs in the Wild论文详解

    减小源域和目标域之间的域间差异,使得使用源域的图片和Label训练的分割模型可以用于目标域的分割。

    AI深度学习求索
  • 推荐四十多条纯干货 Java 代码优化建议

    代码优化最重要的作用应该是避免未知的错误,因此在写代码的时候,从源头开始注意各种细节,权衡并使用最优的选择,将会很大程度上避免出现未知的错误,从长远看也极大的降...

    用户1655470

扫码关注云+社区

领取腾讯云代金券