一.stream介绍

  stream 是jdk 一个加强的api操作,翻译过来就是流的意思,主要是对Collection 集合的一些操作,流一但生成就会有方向性,类似于自来水管的水流一样,不可以重复使用。

  stream 中的操作有filter map limt sorted collect

二.生成stream的方式

  集合.stream(); − 为集合创建串行流

  集合.parallelStream()  − 为集合创建并行流

//列举一些常见的创建stream的方法
List<Apple> apples = Arrays.asList(new Apple("red", 120),new Apple("green", 170),new Apple("yellow", 200)); Stream<Apple> stream = apples.stream(); Stream<Apple> stream2 = Stream.of(new Apple("red", 120),new Apple("green", 170),new Apple("yellow", 200)); Apple arr [] = {new Apple("red", 120),new Apple("green", 170),new Apple("yellow", 200)};
Stream<Apple> stream3 = Arrays.stream(arr);

三.stream中的操作

 1.filter distinct skip limit 操作

public class StreamOperator {

    public static void main(String[] args) {

        List<Integer> asList = Arrays.asList(1, 2, 3, 4, 5, 7, 6, 4, 2, 1, 8, 6, 9, 3);

        // 1.filter 过滤偶数  将流按一定条件进行过虑  返回过虑后符合规则的stream
List<Integer> filterList = asList.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());
System.out.println(filterList); //2.distinct 去重
List<Integer> disList = asList.stream().distinct().collect(Collectors.toList());
System.out.println(disList); //3.skip 跳过n个元素
List<Integer> skipList = asList.stream().skip(5).collect(Collectors.toList());
System.out.println(skipList); //4.limit 极限值是几个(个人理解,也就是最多取几个元素,如果limit取的个数超过了stream中元素的最大个数,会取到流中的全部元素)
List<Integer> limList = asList.stream().limit(5).collect(Collectors.toList());
System.out.println(limList); }
}

2.map flatmap操作

public class StreamTest {
public static void main(String[] args) { //map 操作
List<Apple> apples =Arrays.asList(
new Apple("green", 150),new Apple("red", 170),new Apple("yellow", 190),
new Apple("blue", 210)); //map 操作是将stream 通过map操作返回符合map规则的stream
     // map 与filter 的区别
     //  map是一个Function 即传和一个 T 返回一个 R 类似于get操作 如果流中有元素符合map的操作条件,会将得到的R存入到stream中,会改变流中存储的元素
     //  filter 是一个 Predicate 即传入一个 T 返回的是bollean 是用来做判断的,如果流中的某个元素符合filter的条件,就会存入到stream中,不符合的将被过滤掉,不会改变流中存储的元素 Stream<String> map = apples.stream().map(Apple::getColor); //flatmap(扁平化)
String [] arr = {"hello","world"};
//{h,e,l,l,o} {w,o,r,l,d}
Stream<String[]> streamMap = Arrays.stream(arr).map(w->w.split("")); //[h,e,l,l,o,w,o,r,l,d] 由flatMap的参数可知,传入的参数T最后都合成一个只要是继承stream的类即可,因此将streamMap流数组传入flatMap会得到1个stream流
// flatMap(Function<? super T, ? extends Stream<? extends R>> mapper)
// R apply(T t);
Stream<String> flatMap = streamMap.flatMap(Arrays::stream);
flatMap.distinct().forEach(System.out::print);
}
}

3.sort collect

public class StreamTest {
public static void main(String[] args) {
List<Apple> apples =Arrays.asList(
new Apple("green", 150),new Apple("red", 170),new Apple("yellow", 190),
new Apple("blue", 210));    //sorted 是按颜色的字母顺序来排序
     //collect 是将流转换成相对应的集合
List<Apple> collect = apples.stream().sorted(Comparator.comparing(Apple::getColor)).collect(Collectors.toList()); }
}

四.stream 的并行操作

  将集合转换成并行流后之后,其它操作与串行流相同

  并行流可以通过将程序休眠,通过jconsole 工具查看

jdk1.8 -- stream 的使用的更多相关文章

  1. 使用jdk1.8 stream特性对参数名称进行排序

    在对外对接的时候,通常会碰到签名方式, 然后签名的时候,要求按照参数名称进行排序. 比如参数为 c=22&a=1, 需要将结果排序为a=1&c=22, 然后再进行别的运算. 可以使用j ...

  2. JDK1.8 Stream

    Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达 ...

  3. jdk1.8 Stream 特性总结

    不是数据结构 它没有内部存储,它只是用操作管道从 source(数据结构.数组.generator function.IO channel)抓取数据. 它也绝不修改自己所封装的底层数据结构的数据.例如 ...

  4. java代码之美(12)---CollectionUtils工具类

    java代码之美(12)---CollectionUtils工具类 这篇讲的CollectionUtils工具类是在apache下的, 而不是springframework下的CollectionUt ...

  5. Java中List集合去除重复数据的六种方法

    1. 循环list中的所有元素然后删除重复 public static List removeDuplicate(List list) { for ( int i = 0 ; i < list. ...

  6. java代码(12) ---CollectionUtils工具类

    CollectionUtils工具类 CollectionUtils工具类是在apache下的,而不是springframework下的CollectionUtils 个人觉得在真实项目中Collec ...

  7. ForkJoinPool大型图文现场(一阅到底 vs 直接收藏)

    知识回顾 并发工具类我们已经讲了很多,这些工具类的「目标」是让我们只关注任务本身,并且忽视线程间合作细节,简化了并发编程难度的同时,也增加了很多安全性.工具类的对使用者的「目标」虽然一致,但每一个工具 ...

  8. Java进阶篇之十五 ----- JDK1.8的Lambda、Stream和日期的使用详解(很详细)

    前言 本篇主要讲述是Java中JDK1.8的一些新语法特性使用,主要是Lambda.Stream和LocalDate日期的一些使用讲解. Lambda Lambda介绍 Lambda 表达式(lamb ...

  9. JDK1.8新特性——Stream API

    JDK1.8新特性——Stream API 摘要:本文主要学习了JDK1.8的新特性中有关Stream API的使用. 部分内容来自以下博客: https://blog.csdn.net/icarus ...

随机推荐

  1. demo(一) react-native-router-flux

    react-native init AwesomeProject cd AwesomeProject 安装模块 npm i react-native-router-flux --save

  2. vueApp打包

    本地打包测试 http-server是一个基于node.js的简单的,零配置的命令行http服务器.安装:npm install http-server -g使用:http-server [path] ...

  3. BZOJ1070: [SCOI2007]修车(最小费用最大流,思维)

    Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序, ...

  4. Navicat连接的某个表一直加载并且不能关闭

    问题: 今天下午突然发现数据库的一张表一直加载,也出不来数据,并且也不能关闭.解决办法: 在Navicat中中执行如下命令: SHOW PROCESSLIST; 如果state列中有lock字眼,通过 ...

  5. ACM之路(13)—— 树型dp

    最近刷了一套(5题)的树型dp题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=116767#overview,算是入了个门,做下总结. ...

  6. Hdu 5248

    hdu5248-序列变换 题意: 给你一个序列A,要求改变序列A中的某些元素的顺序,形成一个新的数列B,并保证数列B严格单调递增,求出最小代价. 代价计算公式 $ cost(a,b)=max(|A_i ...

  7. in和exists的区别

    表展示 首先,查询中涉及到的两个表,一个user和一个order表,具体表的内容如下: user表: order表: in 确定给定的值是否与子查询或列表中的值相匹配.in在查询的时候,首先查询子查询 ...

  8. IntelliJ IDEA 2017.3 多模块右边栏 maven projects,maven项目命名问题

    我新建了一个maven web 模块,命名为cloud-access,可是install的时候,名字突然变为cloud-access Maven Webapp了,我就纳闷了,怎么回事.找了很久没发现原 ...

  9. 第11组 Alpha冲刺(1/6)

    队名 不知道叫什么团队 组长博客 组长博客 作业博客 https://edu.cnblogs.com/campus/fzu/SE_FZU_1917_K/homework/9938 项目情况 燃尽图 陈 ...

  10. Android中的asserts和res/raw资源目录

    1.assets目录 assets目录下称为原生文件,无法通过R资源清单类访问,这类文件在被打包成apk文件时是不会进行压缩的: (1)使用方法 AssetManager assets = this. ...