public class Test08 {
/*
* 二、中间的加工操作
* (1)filter(Predicate p):过滤
* (2)distinct():去重
* (3)limit(long maxSize):取有限的几个
* (4)skip(long n):跳过n个
* (5)peek(Consumer action) 接收Lambda表达式,对流中的每个数据执行Lambda体操作
* (6)sorted():排序,按照自然排序
* sorted(Comparator com):排序,按照定制排序
* (7)map(Function f):接收Lambda表达式,对流中的每个数据,执行Lambda体操作,返回新的数据构成新的流
* (8)flatMap(Function f)
*
* map(Function<? super T,? extends R> mapper) map操作流中的把T对象变成R对象,由R对象构成新的流
* flatMap(Function<? super T,? extends Stream<? extends R>> mapper)
* flatMap把流中的数据T对象压扁变成一个Stream,然后把一个个的Stream最后再合成一个大的Stream
*/
public static void main(String[] args) {
// test01();
// test02();
// test03();
// test04();
// test05();
// test06();
// test07();
// test08();
// test09();
// test10();
// test11();
test12();
} public static void test01() {
//1、创建Stream
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6); //2、加工处理
//过滤:filter(Predicate p)
//把里面的偶数拿出来
/*
* filter(Predicate p)
* Predicate是函数式接口,抽象方法:boolean test(T t)
*/
stream = stream.filter(t -> t % 2 == 0); //3、终结操作:例如:遍历
stream.forEach(System.out::println);
} //连起来写
public static void test02() {
Stream.of(1, 2, 3, 4, 5, 6)
.filter(t -> t % 2 == 0)
.forEach(System.out::println);
} //去重
public static void test03() {
Stream.of(1, 2, 3, 4, 5, 6, 2, 2, 3, 3, 4, 4, 5)
.distinct()
.forEach(System.out::println);
} //取指定数量
public static void test04() {
Stream.of(1, 2, 3, 4, 5, 6, 2, 2, 3, 3, 4, 4, 5)
.limit(3)
.forEach(System.out::println);
} //去重加过滤
public static void test05() {
Stream.of(1, 2, 2, 3, 3, 4, 4, 5, 2, 3, 4, 5, 6, 7)
.distinct() //(1,2,3,4,5,6,7)
.filter(t -> t % 2 != 0) //(1,3,5,7)
.limit(3)
.forEach(System.out::println);
} //跳过指定的位置
public static void test06() {
Stream.of(1, 2, 3, 4, 5, 6, 2, 2, 3, 3, 4, 4, 5)
.skip(5)
.forEach(System.out::println);
} //跳过 去重 过滤
public static void test07() {
Stream.of(1, 2, 3, 4, 5, 6, 2, 2, 3, 3, 4, 4, 5)
.skip(5)
.distinct()
.filter(t -> t % 3 == 0)
.forEach(System.out::println);
} public static void test08() {
long count = Stream.of(1, 2, 3, 4, 5, 6, 2, 2, 3, 3, 4, 4, 5)
.distinct()
.peek(System.out::println) //Consumer接口的抽象方法 void accept(T t)
.count();//终止操作
System.out.println("count=" + count);
} public static void test09() {
//输出出前三个最大值,前三名最大的,不重复
Stream.of(11, 2, 39, 4, 54, 6, 2, 22, 3, 3, 4, 54, 54)
.distinct()
.sorted((t1, t2) -> -Integer.compare(t1, t2))//Comparator接口 int compare(T t1, T t2) 注意这里前面加了个-号(-Integer) 倒序
.limit(3)
.forEach(System.out::println);
} public static void test10() {
Stream.of(1, 2, 3, 4, 5)
.map(t -> t += 1)//Function<T,R>接口抽象方法 R apply(T t)
.forEach(System.out::println);
} //转换成大写
public static void test11() {
String[] arr = {"hello", "world", "java"};
Arrays.stream(arr).map(t -> t.toUpperCase())
.forEach(System.out::println);
} public static void test12() {
String[] arr = {"hello", "world", "java"};
Stream<String> flatMap = Arrays.stream(arr)
.flatMap(t -> Stream.of(t.split("|")));//Function<T,R>接口抽象方法 R apply(T t) 现在的R是一个Stream
flatMap.forEach(System.out::println);
} }

Stream(三)的更多相关文章

  1. NodeJS Stream 三:readable

    什么是可读流 可读流是生产数据用来供程序消费的流.我们常见的数据生产方式有读取磁盘文件.读取网络请求内容等,看一下前面介绍什么是流用的例子: const rs = fs.createReadStrea ...

  2. NodeJS 难点(网络,文件)的 核心 stream 三:readable ?

    什么是可读流 可读流    常见  读取磁盘文件.读取网络请求内容等,看一下前面介绍什么是流用的例子: const rs = fs.createReadStream(filePath); 我们常见的控 ...

  3. 第二章 Stream API

    引例: 1 List<String> strList = Arrays.asList("zhaojigang","nana","tiany ...

  4. JAVA8之lambda表达式具体解释,及stream中的lambda使用

    前言: 本人也是学习lambda不久,可能有些地方描写叙述有误,还请大家谅解及指正! lambda表达式具体解释 一.问题 1.什么是lambda表达式? 2.lambda表达式用来干什么的? 3.l ...

  5. Stream闪亮登场

    Stream闪亮登场 一. Stream(流)是什么,干什么 Stream是一类用于替代对集合操作的工具类+Lambda式编程,他可以替代现有的遍历.过滤.求和.求最值.排序.转换等 二. Strea ...

  6. 1.2 Stream API

    引例: List<String> strList = Arrays.asList("zhaojigang","nana","tianya& ...

  7. Stream API

    引例: 1 List<String> strList = Arrays.asList("zhaojigang","nana","tiany ...

  8. Java 8创建Stream流的5种方法

    不知不觉间,Java已经发展到13了,来不及感慨时间过得真的太快了,来不及学习日新月异的技术更新,目前大多数公司还是使用的JDK8版本,一方面是版本的稳定,另一方面是熟悉,所以很多公司都觉得不升级也挺 ...

  9. java8(2)--- Stream API

    1.简述 Java8中有两大最为重要的改变.第一个是 Lambda 表达式:另外一 个就是 Stream API. Stream 是处理集合的抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复 ...

  10. [源码解析] 当 Java Stream 遇见 Flink

    [源码解析] 当 Java Stream 遇见 Flink 目录 [源码解析] 当 Java Stream 遇见 Flink 0x00 摘要 0x01 领域 1.1 Flink 1.2 Java St ...

随机推荐

  1. 使用DynamicExpresso实现表达式求值

    之前写了一篇Z.Expressions表达式计算的博客,直到最近才发现Z.Expressions不是免费的.Z.Expressions从2.0开始支持了NetCore,使用一段时期后会提示许可证到期, ...

  2. Java源码赏析(二)Java常见接口

    一.Comparable接口 package java.lang; import java.util.*; public interface Comparable<T> { /** * i ...

  3. [Abp vNext 源码分析] - 21. 界面与文字的本地化

    一.简介 ABP vNext 提供了全套的本地化字符串支持,具体用法可以参考官方使用文档.vNext 本身是对 Microsoft 提供的本地化组件进行了实现,通过 JSON 文件提供本地化源,这一点 ...

  4. 数据库图形表Navicat Premium

    1.什么是数据库? 存储数据,为了方便查询和使用 web时代使用最广泛的关系型数据库 2.历史: 瑞典公司开发,卖给SUN,SUN又卖给ORACLE 开源,免费,支持多平台 3.数据库图形表Navic ...

  5. spring:bean的生命周期

    1.spring中bean的生命周期 (1)概念 在spring框架中,所有的bean对象都有生命周期,就是指bean的创建.初始化.服务.销毁的一个过程. (2)bean的生命周期 bean的定义 ...

  6. 原创-公司项目部署交付环境预检查shell脚本

    大型项目环境预检查脚本,根据自己实际情况修改脚本中变量,给大家一个思路~ #!/usr/bin/env bash root=$( cd $(dirname $0) pwd ) source " ...

  7. 报表和仪表板在线设计器Stimulsoft Designer 最新版发布

    Stimulsoft Designer是统一的Stimulsoft框架的一部分,该框架包括用于生成报表和分析数据的引擎.报表设计器和查看器. 您可以在计算机上创建报表,继续使用在线设计器在云中对其进行 ...

  8. 【CF1425H】Huge Boxes of Animal Toys 题解

    原题链接 题意简介: 已知分别处在 \((-\infty,-1]\) H.\((-1,0)\) .\((0,1)\) .\([1,\infty)\) 的实数的数量(下记为集合 \(A,B,C,D\) ...

  9. 小伙伴问我:如何搭建Maven私服?我连夜肝了这篇实战文章!!

    写在前面 十一假期期间,也有很多小伙伴不忘学习呀,看来有很多小伙伴想通过十一长假来提升自己的专业技能!这不,就有小伙伴在微信上问我:如何搭建Maven私服?让我专门推一篇搭建Maven私服的文章.安排 ...

  10. three.js学习5_渲染器

    THREE.WebGLRenderer WebGL Render 用WebGL渲染出你精心制作的场景 介绍 在之前的介绍中, 已经介绍过场景, 相机, 光源, 有了这些后, 就可以形成一个可观的三维展 ...