日常使用

前言:依旧使用购物车的数据

/**

* 演示流的各种操作

* @author user

*

*/

public class StreamOperator {

List list;

@Before

public void init() {

list=CarService.getCartSkuList();

}

/**

* 过滤操作

*/

@Test

public void filterTest() {

list.stream()

.filter(sku->sku.getSkCategory().equals(SkCategoryEnum.BOOKS))

.forEach(sku ->System.out.println(JSON.toJSONString(sku)));

}

/**

* 转换操作

*/

@Test

public void mapTest() {

list.stream()

.map(sku-> sku.getSkuName())

.forEach(item -> System.out.println(item));

}

/**

* 将对象转换成流

*/

@Test

public void flatMapTest() {

list.stream()

.flatMap(sku->Arrays.stream(sku.getSkuName().split("")))

.forEach(item -> System.out.println(item));

}

/**

* 对流进行遍历操作,与forEach类似,但是是中间操作

*/

@Test

public void peek() {

list.stream()

.peek(sku->System.out.println(sku.getSkuName()))

.forEach(sku ->System.out.println(JSON.toJSONString(sku)));

}

/**

* 排序操作

*/

@Test

public void sorted() {

list.stream()

.peek(sku->System.out.println(sku.getSkuName()))

.sorted(Comparator.comparing(Sku::getTotalPrice))

.forEach(sku ->System.out.println(JSON.toJSONString(sku)));

}

/**

* 去重

*/

@Test

public void distinctTest() {

list.stream()

.map(sku->sku.getSkCategory())

.distinct()

.forEach(sku ->System.out.println(JSON.toJSONString(sku)));

}

/**

* 跳过前n条数据

*/

@Test

public void skipTest() {

list.stream()

.sorted(Comparator.comparing(Sku::getTotalPrice))

.skip(3)

.forEach(sku ->System.out.println(JSON.toJSONString(sku)));

}

/**

* 截断前n条操作

*/

@Test

public void limitTest() {

list.stream()

.sorted(Comparator.comparing(Sku::getTotalPrice))

.limit(3)

.forEach(sku ->System.out.println(JSON.toJSONString(sku)));

}

//终端操作

@Test

public void allMatchTest() {

// 判断所以商品总价是否都超过了100元

boolean match=list.stream()

.allMatch(sku->sku.getTotalPrice()>100);

System.out.println(match);

}

@Test

public void anyMatchTest() {

// 有一个商品总价大于100返回ture

boolean match=list.stream()

.anyMatch(sku->sku.getTotalPrice()>100);

System.out.println(match);

}

@Test

public void noneMatchTest() {

// 没有一个商品总价大于100返回ture

boolean match=list.stream()

.noneMatch(sku->sku.getTotalPrice()>100);

System.out.println(match);

}

/**

* 找第一个

*/

@Test

public void findFirstTest() {

Optional opSku =list.stream()

.findFirst();

}

/**

* 找任意一个

*/

@Test

public void findAnyTest() {

Optional opSku =list.stream()

.findAny();

}

/**

* 找最大

*/

@Test

public void maxTest() {

OptionalDouble optionalDouble=list.stream()

.mapToDouble(Sku::getTotalPrice)

.max();

System.out.println(optionalDouble.getAsDouble());

}

/**

* 找最小

*/

@Test

public void minTest() {

OptionalDouble optionalDouble=list.stream()

.mapToDouble(Sku::getTotalPrice)

.min();

System.out.println(optionalDouble.getAsDouble());

}

/**

* 统计

*/

@Test

public void countTest() {

long count=list.stream()

.count();

System.out.println(count);

}

}

生成流的方式

@Test

public void streamFromValue() {

Stream stream=Stream.of(1,2,3,4);

stream.forEach(System.out::println);

}

@Test

public void streamFromArray() {

int[] nums= {1,2,3,4};

IntStream stream=Arrays.stream(nums);

stream.forEach(System.out::println);

}

@Test

public void streamFromFile() throws IOException {

Stream stream=Files.lines(Paths.get("/common/src/main/java/com/fuiou/lambda/stream/StreamOperator.java"));

stream.forEach(System.out::println);

}

@Test

public void streamFromFunction() throws IOException {

//Stream stream=Stream.iterate(0, n->n+2);

Stream stream=Stream.generate(Math::random);

stream

.limit(100)

.forEach(System.out::println);

}

收集器

收集器:将流的元素累计成一个结果

比如:将筛选过的数据,收集成一个list

/**

* 收集成集合

*/

@Test

public void toList() {

List filterList=list.stream()

.filter(sku->sku.getTotalPrice()>100)

.collect(Collectors.toList());

for (Sku sku2 : filterList) {

System.out.println(sku2.getSkuName());

}

}

/**

* 分组

*/

@Test

public void groupingBy() {

//Map

Map> map=list.stream()

.collect(Collectors.groupingBy(sku->sku.getSkCategory()));

System.out.println(map);

}

/**

* 分区

*/

@Test

public void partition() {

// 将数据分成总价>100和<=100的两组

Map> map=list.stream()

.collect(Collectors.partitioningBy(sku->sku.getTotalPrice()>100));

}

android 流式编程,流式编程相关推荐

  1. 编程范式:函数式编程防御式编程响应式编程契约式编程流式编程

    不长的编码生涯,看到无数概念和词汇:面向对象编程.过程式编程.指令式编程.函数式编程.防御式编程.流式编程.响应式编程.契约式编程.进攻式编程.声明式编程--有种生无可恋的感觉. 本文试图加以汇总和整 ...

  2. java1.8 流式计算:利用接口的函数式编程 + 链式编程

    java1.8 流式计算:利用接口的函数式编程 + 链式编程 文章目录 java1.8 流式计算:利用接口的函数式编程 + 链式编程 1.流式计算 1)ArrayList和Stream关联的底层解析( ...

  3. android 异步编程,flutter异步编程-事件循环、Isolate、Stream(流)

    事件循环.Isolate 开始前我们需要明白 Dart 是单线程的并且 Flutter 依赖于 Dart 如果你知道js 中的event loop 将很好理解dart的整个异步过程 先看一段代码 im ...

  4. IO流,多线程,网络编程(4)JavaSE

    1 IO流 Java如何操作电脑上的文件和文件夹?通过File类对它们进行操作 因为Java是面向对象的,所以最擅长的就是操作对象,将盘符上的文件/目录的各种信息进行了封装,封装为一个对象,我们程序就 ...

  5. 响应式编程(反应式编程)的来龙去脉(同步编程、多线程编程、异步编程再到响应式编程)

    响应式编程的来龙去脉(同步编程.多线程编程.异步编程再到响应式编程) 文章目录 响应式编程的来龙去脉(同步编程.多线程编程.异步编程再到响应式编程) 简介 1. 示例 2. 同步编程 3. 多线程编程 ...

  6. Storm之——流组件简单串行编程实践

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/78447229 Storm是一个分布式是实时计算系统,它设计了一种对流和计算的抽象, ...

  7. 什么是反应式编程(超详细说明),反应式编程和命令式编程的区别。如何使用Spring中的Reactor。Reactor中常用的操作。Mono和Flux。

    文章目录 一.反应式编程初探 什么是反应式编程 为什么需要反应式编程? 反应式编程的规范 二.上手反应式编程(使用Spring中的Reactor) 对比反应式编程和命令式编程代码 添加相应依赖 Mon ...

  8. Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制)

    原文:Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制) 异常机制和File类 异常机制 基本概念 异常就是"不正常"的含义,在 Java 语言中主要指 ...

  9. 平流式初沉池贮砂斗计算_给排水之市政污水处理构筑物:平流式、曝气式、旋流式三大沉砂池...

    [喜讯!2006-2018年注册给排水空白真题电子版.2019年注册给排水考试用规范电子版(共46本)开放下载啦!领取方式:关注本号+转发此文,私信留言"历年真题"即可获得真题下载 ...

  10. css-适配布局类型-流式布局-响应式布局

    制作手机界面时,一般按照2倍的大小去做. 如果设备的宽度大于显示的宽度,可以做一个适配 流体布局 来个例子,体验 代码 PC端可适配 移动端 电脑,与移动端都可正常显示 假设,给每一个a标签加上了边框 ...

最新文章

  1. 乔布斯 18 岁求职信拍卖价 22.24 万美元,值吗?
  2. 《架构漫谈》阅读笔记
  3. Java输出数组中最长递增子序列的代码
  4. MAC地址进行验证的方法
  5. 反转了!“只问了1个框架,就给了35K的Python岗”
  6. java多线程通信方法
  7. 一些VC的快捷键以及调试技巧
  8. 第一节:Create React App
  9. JSONArray.fromObject(str)
  10. 强劲有力的EnableQ在线调查问卷引擎
  11. 九宫格日记 2017年12月19日(周二)
  12. 计算机打印病历格式要求,计算机打印病历书写要求
  13. 使用vim 改变文件编码格式
  14. android录制屏幕接口,ARDC Android 远程桌面助手 录屏 演示 MD
  15. C语言基础--从零开始初识语言(多图超详解|超万字教程)
  16. 数字钱包红海角逐,小程序生态快速引入可助力占领智慧设备入口
  17. matlab 信道容量的迭代算法,实验二一般信道容量迭代算法详解.ppt
  18. oracle 电子书大全
  19. vc使用默认的浏览器打开网页
  20. 《麦肯锡精英的谈判策略》 -豆瓣评分8.2

热门文章

  1. ['1','2','3'].map(parseInt)
  2. html5实现获取地理位置信息并定位
  3. 原 记录一下iOS开发中琐碎的点点_6
  4. 在 Ubuntu 上安装 Android Studio
  5. 树的方向,风决定;人的方向,自己决定
  6. VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径
  7. ORACLE安装启图形界面与oracle安装介质解压后缺jar包
  8. 安卓开发屏幕分辨率尺寸适配问题【原创】
  9. C++非类型模板参数
  10. 在代码中获取ApplicationContext实例