Java8新特性——stream流
一、基本API初探
- package java8.stream;
- import java.util.Arrays;
- import java.util.IntSummaryStatistics;
- import java.util.List;
- import java.util.Random;
- import java.util.stream.Collectors;
- import java.util.stream.IntStream;
- /**
- * @author jiaqing.xu@hand-china.com
- * @version 1.0
- * @name
- * @description
- * @date 2018/7/15
- */
- public class BasicTest {
- public static void main(String[] args) {
- //创建串行流
- List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
- List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
- filtered.forEach(System.out::println);
- //使用foreach进行数据迭代 limit 方法用于获取指定数量的流
- Random random = new Random();
- random.ints().limit(10).forEach(System.out::println);
- //Map用于映射每个元素对应的结果,原值为i 映射到i*i .collect(Collectors.toList()):将stream再转换回list集合
- List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
- // 获取对应的平方数
- List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().limit(2).collect(Collectors.toList());
- squaresList.forEach(System.out::println);
- //filter 方法用于通过设置的条件过滤出元素
- List<String> stringList = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
- // 获取空字符串的数量
- Long count = stringList.stream().filter(string -> string.isEmpty()).count();
- System.out.println("The count of empty string:"+count);
- //sorted用于对流进行排序,默认是从小到大
- List<Integer> array = Arrays.asList(1,3,2,4);
- List<Integer> sortedList = array.stream().sorted().collect(Collectors.toList());
- sortedList.forEach(System.out::println);
- //流并行处理程序parallelStream
- List<String> stringList2 = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl","");
- // 获取空字符串的数量
- Long count2 = stringList2.parallelStream().filter(string -> string.isEmpty()).count();
- System.out.println("The count of empty string:"+count2);
- //collectors 可以返回列表或者字符串
- List<String> stringList3 = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl","");
- String mergedString = stringList3.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
- System.out.println("合并字符串: " + mergedString);
- //
- int[] numberList = {12,3,34,67,100,99};
- IntStream intStream = IntStream.of(numberList);
- IntSummaryStatistics stats = intStream.summaryStatistics();
- System.out.println("列表中最大的数 : " + stats.getMax());
- System.out.println("列表中最小的数 : " + stats.getMin());
- System.out.println("所有数之和 : " + stats.getSum());
- System.out.println("平均数 : " + stats.getAverage());
- }
- }
二、分组和合并
- /**
- * @author jiaqing.xu@hand-china.com
- * @version 1.0
- * @name
- * @description 分组、合并测试dto
- * @date 2018/7/15
- */
- public class Foo {
- private int code;
- private int count;
- public Foo(int code, int count) {
- this.code = code;
- this.count = count;
- }
- public int getCode() {
- return code;
- }
- public void setCode(int code) {
- this.code = code;
- }
- public int getCount() {
- return count;
- }
- public void setCount(int count) {
- this.count = count;
- }
- @Override
- public String toString() {
- return "Foo{" +
- "code=" + code +
- ", count=" + count +
- '}';
- }
- }
- /**
- * @author jiaqing.xu@hand-china.com
- * @version 1.0
- * @name
- * @description 测试分组和合并 groupingBy方法以及reduce方法
- * @date 2018/7/15
- */
- public class TestFoo {
- public static void main(String[] args) {
- Foo foo1 = new Foo(1, 2);
- Foo foo2 = new Foo(2, 23);
- Foo foo3 = new Foo(2, 6);
- List<Foo> list = new ArrayList<>(4);
- list.add(foo1);
- list.add(foo2);
- list.add(foo3);
- Map<Integer, List<Foo>> collect = list.stream().collect(Collectors.groupingBy(Foo::getCode));
- //存储最后的汇总结果集合
- List<Foo> result = new ArrayList<>();
- collect.forEach((k,v)->{
- Optional<Foo> sum = v.stream().reduce(
- (v1, v2) -> { //合并
- v1.setCount(v1.getCount()+v2.getCount());
- return v1;
- }
- );
- result.add(sum.orElse(new Foo(0,10)));
- });
- result.forEach(System.out::print);
- }
- }
将2号记录的count值进行了合并汇总!23+6=29
Java8新特性——stream流的更多相关文章
- 这可能是史上最好的 Java8 新特性 Stream 流教程
本文翻译自 https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ 作者: @Winterbe 欢迎关注个人微信公众 ...
- Java8新特性 Stream流式思想(二)
如何获取Stream流刚开始写博客,有一些不到位的地方,还请各位论坛大佬见谅,谢谢! package cn.com.zq.demo01.Stream.test01.Stream; import org ...
- Java8新特性Stream流应用示例
Java8新特性介绍 过滤集合 List<String> newList = list.stream().filter(item -> item != null).collect(C ...
- java8 新特性Stream流的应用
作为一个合格的程序员,如何让代码更简洁明了,提升编码速度尼. 今天跟着我一起来学习下java 8 stream 流的应用吧. 废话不多说,直入正题. 考虑以下业务场景,有四个人员信息,我们需要根据性 ...
- Java8新特性 Stream流式思想(一)
遍历及过滤集合中的元素使用传统方式遍历及过滤集合中的元素package cn.com.zq.demo01.Stream.test01.Stream; import java.util.ArrayLis ...
- Java8新特性 Stream流式思想(三)
Stream接口中的常用方法 forEach()方法package cn.com.cqucc.demo02.StreamMethods.Test02.StreamMethods; import jav ...
- Java8 新特性 —— Stream 流式编程
本文部分摘自 On Java 8 流概述 集合优化了对象的存储,大多数情况下,我们将对象存储在集合是为了处理他们.使用流可以帮助我们处理对象,无需迭代集合中的元素,即可直接提取和操作元素,并添加了很多 ...
- java8 新特性 Stream流 分组 排序 过滤 多条件去重
private static List<User> list = new ArrayList<User>(); public static void main(String[] ...
- Java8 新特性 Stream 无状态中间操作
无状态中间操作 Java8 新特性 Stream 练习实例 中间无状态操作,可以在单个对单个的数据进行处理.比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)... 过滤 fil ...
随机推荐
- 2019 ICPC南京网络预选赛 I Washing clothes 李超线段树
题意:有n个人,每个人有一件衣服需要洗,可以自己手洗花费t时间,也可以用洗衣机洗,但是洗衣机只有一台,即每个时刻最多只能有·一个人用洗衣机洗衣服.现在给你每个人最早可以开始洗衣服的时间,问当洗衣机的洗 ...
- CodeForces - 940E - Cashback +贪心+DP
传送门:CodeForces - 940E - Cashback 题意:在一个长度为n的数组中,可以分出长度为 k 连续的多个数组b(每个数组 b 的 k 可不相同),然后,可以对每个数组 b 进行删 ...
- SDU暑期集训排位(2)
A. Art solved by sdcgvhgj 3min 签到 B. Biology solved by sdcgvhgj 85min 暴力 C - Computer Science solved ...
- CSU 1804: 有向无环图 拓扑排序 图论
1804: 有向无环图 Submit Page Summary Time Limit: 5 Sec Memory Limit: 128 Mb Submitted: 716 ...
- SpringDataJpa入门案例及查询详细解析
SpringDataJpaSpring Data JPA 让我们解脱了DA0层的操作,基本上所有CRUD都可以依赖于它来实现,在实际的工作工程中,推荐使用Spring Data JPA+ORM(如:h ...
- 用.NET写“算命”程序
用.NET写"算命"程序 "算命",是一种迷信,我父亲那一辈却执迷不悟,有时深陷其中,有时为求一"上上签",甚至不惜重金,向"天神 ...
- pyppeteer的使用
pyppeteer的使用 安装 属于第三方模块进行安装. pip install pyppeteer 在Linux中,如果权限不够则加上. sudo pip install pyppeteer 使用 ...
- Erlcron分析学习
介绍 Erlcron实现类似Linux下面的cron的计划任务. 源码下载地址:https://github.com/erlware/erlcron 原理 Erlcron进程监控树 ecrn_cron ...
- 5分钟理解 SpringBoot 响应式的核心-Reactor
目录 一.前言 二. Mono 与 Flux 构造器 三. 流计算 1. 缓冲 2. 过滤/提取 3. 转换 4. 合并 5. 合流 6. 累积 四.异常处理 五.线程调度 小结 参考阅读 一.前言 ...
- java多线程之创建线程的4种方式及Future
Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.Java可以用四种方式来创建线程: 继承Thread创建线程 实现Runnable接口创建线程 实现callab ...