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();

java stream Api的更多相关文章

  1. 恕我直言你可能真的不会java第2篇:Java Stream API?

    一.什么是Java Stream API? Java Stream函数式编程接口最初是在Java 8中引入的,并且与lambda一起成为Java开发的里程碑式的功能特性,它极大的方便了开放人员处理集合 ...

  2. Java Stream API入门篇

    本文github地址 你可能还没意识到Java对函数式编程的重视程度,看看Java 8加入函数式编程扩充多少类就清楚了.Java 8之所以费这么大功夫引入函数式编程,原因有二: 代码简洁,函数式编程写 ...

  3. Java Stream API性能测试

    已经对Stream API的用法鼓吹够多了,用起简洁直观,但性能到底怎么样呢?会不会有很高的性能损失?本节我们对Stream API的性能一探究竟. 为保证测试结果真实可信,我们将JVM运行在-ser ...

  4. Java Stream API进阶篇

    本文github地址 上一节介绍了部分Stream常见接口方法,理解起来并不困难,但Stream的用法不止于此,本节我们将仍然以Stream为例,介绍流的规约操作. 规约操作(reduction op ...

  5. [java]Stream API——collect、reduce、orElse(x)

    一.collect 1.R collect(Supplier supplier, BiConsumer accumulator, BiConsumer combiner) supplier:一个能创造 ...

  6. [java]Stream API——map和flatMap的区别

    map方法 map的含义为映射.是指对于Stream中包含的每一个元素使用给定的转换函数进行转换. map传入的Lambda表达式必须是Function实例,参数可以为任意类型,而其返回值也是任性类型 ...

  7. Java 8 Stream API Example Tutorial

    Stream API Overview Before we look into Java 8 Stream API Examples, let’s see why it was required. S ...

  8. Java 8 Stream API的使用示例

    前言 Java Stream API借助于Lambda表达式,为Collection操作提供了一个新的选择.如果使用得当,可以极大地提高编程效率和代码可读性. 本文将介绍Stream API包含的方法 ...

  9. java stream collector

    Java Stream API进阶篇 本文github地址 上一节介绍了部分Stream常见接口方法,理解起来并不困难,但Stream的用法不止于此,本节我们将仍然以Stream为例,介绍流的规约操作 ...

随机推荐

  1. redis主从配置(docker实现)

    一.docker新建两个redis服务端,并分别设置端口为6379和6380 命令如下: docker run -p : -d --name redis-server docker.io/redis: ...

  2. Spring WebSocket教程(二)

    实现目标 这一篇文章,就要直接实现聊天的功能,并且,在聊天功能的基础上,再实现缓存一定聊天记录的功能. 第一步:聊天实现原理 首先,需要明确我们的需求.通常,网页上的聊天,都是聊天室的形式,所以,这个 ...

  3. [转]TF-IDF与余弦相似性的应用(一):自动提取关键词

    这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题. 有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工干预,请问怎样才 ...

  4. IIS 日志分析

    查看哪个IP访问量大,访问了什么地址,大可以看到攻击者IP: select c-ip,count(c-ip) AS allcount,cs-uri-stem,cs-uri-query,cs(User- ...

  5. 微软开放了.NET 4.5.1的源代码

    您目前处于: InfoQ首页 新闻 微软开放了.NET 4.5.1的源代码   微软开放了.NET 4.5.1的源代码 作者 姚琪琳 发布于 二月 26, 2014 | 1 讨论 新浪微博腾讯微博豆瓣 ...

  6. 提高Java代码质量的Eclipse插件之Checkstyle的使用具体解释

    CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发者遵守某些编码规范的工具.它可以自己主动化代码规范检查过程.从而使得开发者从这项重要可是枯燥的任务中解脱出来. Ch ...

  7. [hadoop读书笔记]译者序

    一.并行数据库系统 新一代高性能的数据库系统,是在MPP和集群并行计算环境的基础上建立的数据库系统. MPP:大规模并行处理计算机:Massive Parallel Processor.指的是一种处理 ...

  8. Speeding up image loading in WPF using thumbnails

    Technorati Tags: wpf, thumbnails, image, performance, slow, BitmapImage During a recent WPF session ...

  9. 《FPGA全程进阶---实战演练》第九章 计数器要注意

    本小节我们来做一个好玩的事情,就是计数器,还记得在做LED自加实验时我们就曾经提到过关于计数器的相关议题,那么这节我们就来讨论讨论. 探讨一下如下的问题:请用verilog记八个数的写法,分析这个可以 ...

  10. moodle中的完形填空题的文本编写方法

    moodle中的完形填空题的文本编写方法 [完形填空题]考题把一段文字挖去一些空,让考生根据上下文正确地完成这些填空.完型填空题中的一段短文可以包括各种题目,如选择,填空,和数字题等. 题目的编辑是在 ...