java8新特性——stream笔记
stream对象
Stream
IntStream
LongStream
DoubleStream
创建

常用的三种方式:
使用list对象:
- list.stream() − 为集合创建串行流。
- list.parallelStream() − 为集合创建并行流。
Arrays: Arrays.stream( T[] array) − 为数组创建流(可以创建IntStream,LongStream,DoubleStrem)。
Stream: Stream.of(T... values) − 为一组同类型的数据创建流。
demo:
/**
* 集合接口有两个方法来生成流:
* 按照流的类型可分为串行流和并行流
* stream() − 为集合创建串行流。
* parallelStream() − 为集合创建并行流。
*/
private static Stream<String> createStreamFromCollection() {
List<String> list = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
return list.stream();
}
/**
* 使用Stream.of()创建流
* @return
*/
private static Stream<String> createStreamFromValues() {
return Stream.of("hello", "alex", "wangwenjun", "world", "stream");
}
/**
* 使用Arrays.stream()创建流
* 可以生成IntStream,LongStream,DoubleStream
* @return
*/
private static Stream<String> createStreamFromArrays() {
String[] strings = {"hello", "alex", "wangwenjun", "world", "stream"};
return Arrays.stream(strings);
}
操作
filter : 过滤, 过滤掉不符合条件的数据。
map :转换流类型, 返回一个流,该流包含将给定函数应用于该流元素的结果。
比如一个Stream 类型的流组装后成为Stream的流
limit : 分页。
collect : 将流收集成一个数组。
List<Dish> menu = Arrays.asList(
new Dish("pork", false, 800, "肉类"),
new Dish("beef", false, 700, "肉类"),
new Dish("chicken", false, 400, "肉类"),
new Dish("french fries", true, 530, "鱼肉类"),
new Dish("rice", true, 350, "鱼肉类"),
new Dish("season fruit", true, 120, "鱼肉类"),
new Dish("pizza", true, 550, "鱼肉类"),
new Dish("prawns", false, 300, "其他"),
new Dish("salmon", false, 450, "其他"));
//创建菜单流
List<Map<String,Integer>> result = menu.stream().filter(d -> {
// 过滤出卡路里大于300的值
System.out.println("filtering->" + d.getName());
return d.getCalories() > 300;
})
.map(d -> {
Map<String, Integer> map = new HashMap<>();
map.put(d.getName(),d.getCalories());
return map;
})
.limit(3)
.collect(toList());
System.out.println(result);
其他操作
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 6, 7, 7, 1);
List<Integer> result = list.stream().filter(i -> i % 2 == 0).collect(toList());
System.out.println("i -> i % 2 的值 : "+result);
result = list.stream().distinct().collect(toList());
System.out.println("去重 : "+result);
result = list.stream().skip(2).collect(toList());//跳过前两个数
System.out.println("跳过 : "+result);
result = list.stream().limit(4).collect(toList());//取前4个值
System.out.println("分页 : "+result);
System.out.println("循环方式一 : ");
list.forEach(i -> System.out.println(i));
System.out.println("循环方式二 : ");
list.forEach((Integer i) -> System.out.println(i));
System.out.println("循环方式三 : ");
list.forEach(System.out::println);
for (int i : list) {
System.out.println(i);
}
**** 码字不易如果对你有帮助请给个关注****
**** 爱技术爱生活 QQ群: 894109590****
java8新特性——stream笔记的更多相关文章
- java8 新特性学习笔记
Java8新特性 学习笔记 1主要内容 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 其他新特性 2 简洁 速度更快 修 ...
- Java8 新特性 Stream 非短路终端操作
非短路终端操作 Java8 新特性 Stream 练习实例 非短路终端操作,就是所有的元素都遍厉完,直到最后才结束.用来收集成自己想要的数据. 方法有: 遍厉 forEach 归约 reduce 最大 ...
- Java8 新特性 Stream 短路终端操作
短路终端操作 Java8 新特性 Stream 练习实例 传入一个谓词,返回传为boolean,如果符合条件,则直接结束流. 匹配所有 allMatch 任意匹配 anymMatch 不匹配 none ...
- Java8 新特性 Stream 无状态中间操作
无状态中间操作 Java8 新特性 Stream 练习实例 中间无状态操作,可以在单个对单个的数据进行处理.比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)... 过滤 fil ...
- Java8 新特性 Stream() API
新特性里面为什么要加入流Steam() 集合是Java中使用最多的API,几乎每一个Java程序都会制造和处理集合.集合对于很多程序都是必须的,但是如果一个集合进行,分组,排序,筛选,过滤...这些操 ...
- 这可能是史上最好的 Java8 新特性 Stream 流教程
本文翻译自 https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ 作者: @Winterbe 欢迎关注个人微信公众 ...
- java8新特性--Stream的基本介绍和使用
什么是Stream? Stream是一个来自数据源的元素队列并可以进行聚合操作. 数据源:流的来源. 可以是集合,数组,I/O channel, 产生器generator 等 聚合操作:类似SQL语句 ...
- Java8新特性Stream流应用示例
Java8新特性介绍 过滤集合 List<String> newList = list.stream().filter(item -> item != null).collect(C ...
- Java8 新特性 Stream 练习实例
练习实例 配合Java8 新特性 Steam() API 使用 //没有写get set 构造方法 public class Sku { private Integer skuId; private ...
随机推荐
- Django+ajax 返回json数据挨个显示在页面及页面和后台相互传值
通过Ajax传到后台一个值,根据该值返回数据库表中的某一列的值,然后逐个显示到页面,并且给每个加上超链接,可以进行点击查看详细信息 1.通过Ajax传到后台一个值,红色部分为往Django后台传值,蓝 ...
- 9.数据分组 group by
--数据分组 group by --作用:用于 对查询的数据进行分组,并处理 select deptno,job from emp group by deptno,job --1.分组之后,不能将除分 ...
- 迅为IMX6Q开发板提供原理图_底板PCB_驱动程序源码_芯片和LCD数据手册_开发板环境_使用手册
迅为IMX6开发板: Android4.4/6.0系统 Linux + Qt5.7系统 Ubuntu12.04系统 部分案例:HMI:3D打印机:医疗设备:工控机:触控一体机:车载终端 核心板 ...
- [LC] 1007. Minimum Domino Rotations For Equal Row
In a row of dominoes, A[i] and B[i] represent the top and bottom halves of the i-th domino. (A domi ...
- 比率(ratio)|帕雷托图|雷达图|轮廓图|条形图|茎叶图|直方图|线图|折线图|间隔数据|比例数据|标准分数|标准差系数|离散系数|平均差|异众比率|四分位差|切比雪夫|右偏分布|
比率是什么? 比率(ratio) :不同类别数值的比值 在中文里,比率这个词被用来代表两个数量的比值,这包括了两个相似却在用法上有所区分的概念:一个是比的值:另一是变化率,是一个数量相对于另一数量的变 ...
- idea转eclipse快捷键
1.打开idea,点击上方菜单栏中的File, 2.在弹出的setting页面中左侧导航中选择Keymap:在keymaps下拉列表中选择Eclipse:如果想要使用这个快捷键风格,则点击右侧的cop ...
- idea生成serialVersionUID
默认情况下Intellij IDEA不会提示继承了Serializable接口的类生成serialVersionUID的警告.如果需要生成serialVersionUID,就要在Preferences ...
- TCP并发、GIL、锁
TCP实现并发 #client客户端 import socket client = socket.socket() client.connect(('127.0.0.1',8080)) while T ...
- [LC] 298. Binary Tree Longest Consecutive Sequence
Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...
- SAGE|DNA微阵列|RNA-seq|lncRNA|scripture|tophat|cufflinks|NONCODE|MA|LOWESS|qualitile归一化|permutation test|SAM|FDR|The Bonferroni|Tukey's|BH|FWER|Holm's step-down|q-value|
生物信息学-基因表达分析 为了丰富中心法则,研究人员使用不断更新的技术研究lncRNA的方方面面,其中技术主要是生物学上的微阵列芯片技术和表达数据分析方法,方方面面是指lncRNA的位置特征. Bac ...