文档

https://www.runoob.com/java/java8-streams.html

JDK8 Stream API:

https://docs.oracle.com/javase/8/docs/api/index.html

Stream流常用API

中间操作(Intermediate):

可以有零个或多个;打开流,过滤/映射;返回新流;交给下一个操作使用

  1. map(mapTolnt,,flatMap等)、
  2. filter、筛选数据
  3. distinct、
  4. sorted、
  5. peek、
  6. limit
  7. skip :Stream流中的常用方法skip:用于跳过元素

    如果希望跳过前几个元素,可以使用ski方法获取一个截取之后的新流:

    Streamskip(Long n); 如果流的当前长度大于n,则跳过前n个;否则将会得到一个长度为0的空流。
  8. parallel、
  9. sequential、
  10. unordered、
  11. concat : Stream.流中的常用方法 concat:用于把流组合到一起

    如果有两个流,希望合并成为一个流,那么可以使用Stream接口的静态方法concat

    static Stream < T > concat(Stream < ?extends T > a, Stream < ?extends T > b)

终结操作(Terminal):

!!只能有一个最后的操作

这几个方法也叫短路操作(Short-circuiting)

  1. forEach 遍历数据
  2. forEachOrdered、
  3. toArray、
  4. reduce、
  5. collect 收集器 流对象名.collect(Collectors.toList()); 返回一个ArrayList类型的集合
  6. min、
  7. max、
  8. count、返回long类型数据,计算集合或者数组中有多少元素
  9. iterator、
  10. anyMatch、
  11. allMatch、
  12. noneMatch、
  13. findFirst、
  14. findAny

集合、数组获取Stream流

List<String> list = new ArrayList<>();
Stream<String> stream1 = list.stream(); Set<String> set = new HashSet<>();
Stream<String> stream2 = set.stream(); Map<String, String> map = new HashMap<>(); //获取键,存储到一个Set集合中
Set<String> keySet = map.keySet();
Stream<String> stream3 = keySet.stream(); //获取值,存储到一个Collection集合中
Collection<String> values = map.values();
Stream<String> stream4 = values.stream(); //获取键值对(键与值的映射关系entrySet)
Set<Map.Entry<String, String>> entries = map.entrySet();
Stream<Map.Entry<String, String>> stream5 = entries.stream(); //把数组转换为Stream流
Integer[] arr = {1, 2, 3, 4, 5};
String[] arr2 = {"a", "bb", "ccc"};
Stream<Integer> stream6 = Stream.of(arr);
Stream<String> stream7=Stream.of(arr2);

练习案列:

filter:

Stream<T> filter(Predicate<? super T> predicate);
Predicate<? super T> predicate->函数式接口,逻辑判断,返回布尔值
String[] strArray = {"林青霞,30", "张曼玉,35", "王祖贤,33", "柳岩,25"};
//得到字符串中年龄数据大于28的流
Stream<String> arrStream=
Stream.of(strArray).
filter(s->Integer.parseInt(s.split(",")[1])>28);
//输出流
arrStream.forEach(System.out::println);

collect


//Collectors.toList()
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd", "", "jkl");
//去除字符为空的元素
List<String> Qukong=strings.stream().filter(s -> !s.isEmpty()).collect(Collectors.toList());
Qukong.forEach(System.out::println);
/*
输出结果
abc
bc
efg
abcd
jkl
*/ //Collectors.toSet()
//输出大于30岁的人
String[] strArray = {"林青霞,30", "张曼玉,35", "王祖贤,33", "柳岩,25"};
Stream<String> stream = Stream.of(strArray);
Stream<String> Bthan30 =
stream.filter(s -> Integer.parseInt(s.split(",")[1]) > 30);
Set<String> set= Bthan30.collect(Collectors.toSet());
set.forEach(System.out::println); //Collectors.toMap()
//输出大于30岁的人
String[] strArray = {"林青霞,30", "张曼玉,35", "王祖贤,33", "柳岩,25"};
Stream<String> stream = Stream.of(strArray);
Stream<String> Bthan30 =
stream.filter(s -> Integer.parseInt(s.split(",")[1]) > 30);
Map<String,Integer> map= Bthan30.collect(Collectors.toMap(
s->s.split(",")[0],
s->Integer.parseInt(s.split(",")[1])
));
map.entrySet().forEach(System.out::println);

map

//字符串转数字
String[] arr1 = {"1", "2", "3", "4"};
Stream<String> stream = Stream.of(arr1);
stream.map(Integer::parseInt).forEach(System.out::println); //数字转字符串
Integer[] arr = {1, 2, 3, 4, 5};
Stream<Integer> stream1 = Stream.of(arr);
stream1.map(String::valueOf).forEach(System.out::println);

limit

//随机输出100个整数
Random random = new Random();
random.ints().limit(100).sorted().forEach(System.out::println);

skip

String[] arr = {"美羊羊", "喜洋洋", "懒洋洋", "灰太狼", "红太狼"};
Stream<String> stream =Stream.of(arr);
//使用skip方法跳过前3个元素
stream.skip(3).forEach(name ->System.out.println(name));

concat

//创建一个Stream流
Stream<String> stream1 = Stream.of("张三丰", "张翠山", "赵敏", "周芷若", "张无忌");
//获取一个Stream流
String[] arr = {"美羊羊", "喜洋洋", "懒洋洋", "灰太狼", "红太狼"};
Stream<String> stream2 = Stream.of(arr);
//把以上两个流组合为一个流
List<String> list =
Stream.concat(stream1, stream2).collect(Collectors.toList());
list.forEach(System.out::println);
/*
张三丰
张翠山
赵敏
周芷若
张无忌
美羊羊
喜洋洋
懒洋洋
灰太狼
红太狼 进程已结束,退出代码0
/*

Stream流常用API的更多相关文章

  1. lambda表达式以及stream流式api用法

    https://www.cnblogs.com/aoeiuv/p/5911692.html 这篇文章讲的简单全面,记录下 kotlin一些符号的用法 https://www.cnblogs.com/l ...

  2. 详解 stream流

    在本人之前的博文中,我们学习了 I/O流.NIO流的相关概念. 那么,在JDK8的更新内容中,提出了一个新的流 -- stream流 那么,现在,本人就来讲解下这个流: 目录 stream流 常用AP ...

  3. java8 Stream的实现原理 (从零开始实现一个stream流)

    1.Stream 流的介绍 1.1 java8 stream介绍 java8新增了stream流的特性,能够让用户以函数式的方式.更为简单的操纵集合等数据结构,并实现了用户无感知的并行计算. 1.2  ...

  4. JAVA8之 Stream 流(四)

    如果说前面几章是函数式编程的方法论,那么 Stream 流就应该是 JAVA8 为我们提供的最佳实践. Stream 流的定义 Stream 是支持串行和并行操作的一系列元素.流操作会被组合到流管道中 ...

  5. 全面吃透JAVA Stream流操作,让代码更加的优雅

    全面吃透JAVA Stream流操作,让代码更加的优雅 在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行 ...

  6. Java8的Stream流(一) --- 基础用法

    Java8中的Stream Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象. Stream的特性及优点: 无存储. Stream不是一种数据 ...

  7. Java8 Stream流API常用操作

    Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些 ...

  8. 【JDK8】Java8 Stream流API常用操作

    Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些 ...

  9. Java8 流式 API(`java.util.stream`)

    熟悉 ES6 的开发者,肯定对数组的一些方法不是很陌生:map.filter 等.在对一组对象进行统一操作时,利用这些方法写出来的代码比常规的迭代代码更加的简练.在 C♯ 中,有 LINQ 来实现.那 ...

  10. node api 之:stream - 流

    stream 模块可以通过以下方式使用: const stream = require('stream'); 流可以是可读的.可写的.或者可读可写的. 所有的流都是 EventEmitter 的实例. ...

随机推荐

  1. vue学习笔记(二) ---- vue实例的生命周期

    vue实例的生命周期 什么是生命周期:从Vue实例创建.运行.到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期! 生命周期钩子:就是生命周期事件的别名而已: 生命周期钩子 = 生命周期函 ...

  2. 用ksweb+Android做服务器,搭建WordPress博客环境

    旧的安卓手机不要仍,安装上ksweb给wordpress做服务器,隔壁小孩都馋哭了. 为了能在自己的安卓手机服务器上写博客,首先我们来了解一下WordPress和ksweb: WordPress是使用 ...

  3. 分布式配置nacos搭建踩坑指南(下)

    上一篇介绍了在配置nacos中的碰到的坑,这一篇介绍一下如何正确进行nacos的环境搭建和配置,所以本文分为两部分,第一部分为环境搭建,介绍如何安装和运行.第二部分为alibaba Sprint Bo ...

  4. WSL 2 内配置Fcitx自启动

    前言 我通过配置成fcitx进行服务进行,但其权限是root,在普通模式下无法使用 我用的是xserver ( moba xterm),我要在gtk mode 下启动fcitx,其实 不用这么写 操作 ...

  5. idea2022.2.3安装破解

    转:https://www.quanxiaoha.com/article/idea-pojie.html 1 注意事项 如果是卸载了旧版本安装的本版本,安装完成后打不开,可能是旧版本的影响 找到:C: ...

  6. 详解Redisson分布式限流的实现原理

    摘要:本文将详细介绍下RRateLimiter的具体使用方式.实现原理还有一些注意事项. 本文分享自华为云社区<详解Redisson分布式限流的实现原理>,作者: xindoo. 我们目前 ...

  7. Vue框架-03:JS的几种循环方式,Key值的解释,数组/对象的检测与更新,input事件,v-model数据双向绑定,过滤案例,事件修饰符,按键修饰符,表单控制

    目录 前端开发之Vue框架 一.JS循环的几种方式 1.v-for可循环的变量 2.js的循环方式 二.Key值的解释 三.数组.对象的检测与更新 四.input事件 五.v-model双向数据绑定 ...

  8. UBUNTU16.04卸载安装protobuf

    1.卸载 sudo apt-get remove libprotobuf-dev which protoc 然后删除路径即可 2.安装 sudo apt-get install autoconf au ...

  9. ft5426触摸屏I2C

    触摸的点数, 先写入地址0x38, 寄存器0x02, 再次读取0x38的数据,得到1个触摸点 读取全部坐标信息,需要读入30字节数据

  10. CF1311F Moving Points

    题目传送门 思路 给出一种不需要脑子的四颗树状数组解法. 这四颗树状数组分别为:一颗维护负数,一颗维护负数个数,一颗维护正数,一颗维护正数个数. 首先考虑没有速度该怎么求. 不妨先按 \(x_i\) ...