android 流式编程,流式编程
日常使用
前言:依旧使用购物车的数据
/**
* 演示流的各种操作
* @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 流式编程,流式编程相关推荐
- 编程范式:函数式编程防御式编程响应式编程契约式编程流式编程
不长的编码生涯,看到无数概念和词汇:面向对象编程.过程式编程.指令式编程.函数式编程.防御式编程.流式编程.响应式编程.契约式编程.进攻式编程.声明式编程--有种生无可恋的感觉. 本文试图加以汇总和整 ...
- java1.8 流式计算:利用接口的函数式编程 + 链式编程
java1.8 流式计算:利用接口的函数式编程 + 链式编程 文章目录 java1.8 流式计算:利用接口的函数式编程 + 链式编程 1.流式计算 1)ArrayList和Stream关联的底层解析( ...
- android 异步编程,flutter异步编程-事件循环、Isolate、Stream(流)
事件循环.Isolate 开始前我们需要明白 Dart 是单线程的并且 Flutter 依赖于 Dart 如果你知道js 中的event loop 将很好理解dart的整个异步过程 先看一段代码 im ...
- IO流,多线程,网络编程(4)JavaSE
1 IO流 Java如何操作电脑上的文件和文件夹?通过File类对它们进行操作 因为Java是面向对象的,所以最擅长的就是操作对象,将盘符上的文件/目录的各种信息进行了封装,封装为一个对象,我们程序就 ...
- 响应式编程(反应式编程)的来龙去脉(同步编程、多线程编程、异步编程再到响应式编程)
响应式编程的来龙去脉(同步编程.多线程编程.异步编程再到响应式编程) 文章目录 响应式编程的来龙去脉(同步编程.多线程编程.异步编程再到响应式编程) 简介 1. 示例 2. 同步编程 3. 多线程编程 ...
- Storm之——流组件简单串行编程实践
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/78447229 Storm是一个分布式是实时计算系统,它设计了一种对流和计算的抽象, ...
- 什么是反应式编程(超详细说明),反应式编程和命令式编程的区别。如何使用Spring中的Reactor。Reactor中常用的操作。Mono和Flux。
文章目录 一.反应式编程初探 什么是反应式编程 为什么需要反应式编程? 反应式编程的规范 二.上手反应式编程(使用Spring中的Reactor) 对比反应式编程和命令式编程代码 添加相应依赖 Mon ...
- Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制)
原文:Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制) 异常机制和File类 异常机制 基本概念 异常就是"不正常"的含义,在 Java 语言中主要指 ...
- 平流式初沉池贮砂斗计算_给排水之市政污水处理构筑物:平流式、曝气式、旋流式三大沉砂池...
[喜讯!2006-2018年注册给排水空白真题电子版.2019年注册给排水考试用规范电子版(共46本)开放下载啦!领取方式:关注本号+转发此文,私信留言"历年真题"即可获得真题下载 ...
- css-适配布局类型-流式布局-响应式布局
制作手机界面时,一般按照2倍的大小去做. 如果设备的宽度大于显示的宽度,可以做一个适配 流体布局 来个例子,体验 代码 PC端可适配 移动端 电脑,与移动端都可正常显示 假设,给每一个a标签加上了边框 ...
最新文章
- 乔布斯 18 岁求职信拍卖价 22.24 万美元,值吗?
- 《架构漫谈》阅读笔记
- Java输出数组中最长递增子序列的代码
- MAC地址进行验证的方法
- 反转了!“只问了1个框架,就给了35K的Python岗”
- java多线程通信方法
- 一些VC的快捷键以及调试技巧
- 第一节:Create React App
- JSONArray.fromObject(str)
- 强劲有力的EnableQ在线调查问卷引擎
- 九宫格日记 2017年12月19日(周二)
- 计算机打印病历格式要求,计算机打印病历书写要求
- 使用vim 改变文件编码格式
- android录制屏幕接口,ARDC Android 远程桌面助手 录屏 演示 MD
- C语言基础--从零开始初识语言(多图超详解|超万字教程)
- 数字钱包红海角逐,小程序生态快速引入可助力占领智慧设备入口
- matlab 信道容量的迭代算法,实验二一般信道容量迭代算法详解.ppt
- oracle 电子书大全
- vc使用默认的浏览器打开网页
- 《麦肯锡精英的谈判策略》 -豆瓣评分8.2
热门文章
- ['1','2','3'].map(parseInt)
- html5实现获取地理位置信息并定位
- 原 记录一下iOS开发中琐碎的点点_6
- 在 Ubuntu 上安装 Android Studio
- 树的方向,风决定;人的方向,自己决定
- VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径
- ORACLE安装启图形界面与oracle安装介质解压后缺jar包
- 安卓开发屏幕分辨率尺寸适配问题【原创】
- C++非类型模板参数
- 在代码中获取ApplicationContext实例