Stream接口简单使用

什么是stream?

Stream是元素得集合,这点让Stream看起来类似Iterator;可以支持顺序和并行的对原Stream进行汇聚的操作

我们可以把Stream当成一个高级版本的Iterator,原始版本的Iterator,用户只能一个一个的遍历元素并对其执行某些操作;高级版本的Stream,用户只要给出需要对其包含的元素执行什么操作,比如“过滤大于10的数字”,“获取所有数字的和”等,具体这些操作如何应用到每个元素上,就给Stream就好了!

代码演示:

定义一个实体类:

class Cat {private String name;private int age;public Cat() {}public Cat(String name, int age) {this.name = name;this.age = age;}// get,set,toString@Overridepublic boolean equals(Object o) {if (this == o) {return true;}if (o == null || getClass() != o.getClass()) {return false;}Cat cat = (Cat) o;return age == cat.age && Objects.equals(name, cat.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}
}

添加对象到集合中:

 List<Cat> catsList = new ArrayList<>();catsList.add(new Cat("tom", 3));catsList.add(new Cat("tom", 3));catsList.add(new Cat("uom", 3));catsList.add(new Cat("tom", 1));catsList.add(new Cat("jek", 2));catsList.add(new Cat("join", 3));

案列1:遍历集合

 private static void test1(List<Cat> catsList) {catsList.forEach(System.out::println);
}

案列2:筛选集合中年龄大于2的并把它们的名字组成一个新的集合

 private static void test1(List<Cat> catsList) {List<String> collect = catList.stream().filter(a -> a.getAge() > 2).map(Cat::getName).collect(Collectors.toList());}

案列3:转换为set集合

private static void test1(List<Cat> catsList) {//Set<Cat> collect = new HashSet<>(catsList);建议Set<Cat> collect = catsList.stream().collect(Collectors.toSet());
}

案列4:按照年龄排序后转换成linkedHashSet集合

private static void test1(List<Cat> catsList) {                     LinkedHashSet lhs = catsList.stream().sorted(Comparator.comparing(Cat::getAge)).collect(Collectors.toCollection(LinkedHashSet::new))
}

案列5:找出年龄最大的,如果年龄一样找出名字比较大的

 private static void test1(List<Cat> catsList) {Optional<Cat> max = catsList.stream().max((o1, o2) -> {if (o1.getAge() != o2.getAge()) {return o1.getAge() - o2.getAge();}return o1.getName().compareTo(o2.getName());});System.out.println(max.orElse(null));
}

案例6:去重后计算年龄和

 private static void test1(List<Cat> catsList) {Optional<Integer> reduce = catsList.stream().distinct().map(Cat::getAge).reduce(Integer::sum);System.out.println(reduce.orElse(-1));
}

案例7:判断是否所有的年龄都大于2岁

 private static void test1(List<Cat> catsList) {boolean b = catsList.stream().allMatch(a -> a.getAge() > 2);
}

案例8:判断是否至少有一个大于2岁的

 private static void test1(List<Cat> catsList) {boolean b = catsList.stream().anyMatch(a -> a.getAge() > 2);
}

案例9:按照年龄分组:

private static void test1(List<Cat> catsList) {    Map<Integer, List<Cat>> collect = catsList.stream().collect(Collectors.groupingBy(Cat::getAge));
}

java8 Stream接口简单使用相关推荐

  1. Java8 Stream接口流式方法:map操作、filter操作以及flatMap操作

    点击关注公众号,利用碎片时间学习 关于stream 流式操作,在rt.jar 包里面,ReferencePipeline管道方式操作数据 下面集成所有操作方法,利用这些流,处理大数据的方式,效率提升明 ...

  2. java8 .stream().anyMatch / allMatch / noneMatch用法

    java8 stream接口终端操作 anyMatch,allMatch,noneMatch anyMatch:判断的条件里,任意一个元素成功,返回true allMatch:判断条件里的元素,所有的 ...

  3. JAVA8 BiConsumer 接口

    这个接口跟<JAVA8 Consumer接口>很像,表达的想法也是一致的,都是消费的意思,我们先看下接口定义 @FunctionalInterface public interface B ...

  4. java stream toarray_java8 stream接口 终端操作 toArray操作

    对于中间操作和终端操作的定义,请看<JAVA8 stream接口 中间操作和终端操作>,这篇主要讲述的是stream的toArray操作,我们先看下函数的定义以及实现 Object[] t ...

  5. Java8 Stream 函数式接口

    在这里插入图片描述 先贴上几个案例,水平高超的同学可以挑战一下: 从员工集合中筛选出salary大于8000的员工,并放置到新的集合里. 统计员工的最高薪资.平均薪资.薪资之和. 将员工按薪资从高到低 ...

  6. Java8 Stream流式操作接口详解

    stream是用于集合使用的流式操作,可使用collection.stream获取流 default Stream<E> stream() {return StreamSupport.st ...

  7. java8 stream遍历_Java8新特性:Stream流详解

    1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel agg ...

  8. 简洁又快速地处理集合——Java8 Stream(下)

    上一篇文章我讲解 Stream 流的基本原理,以及它与集合的区别关系,讲了那么多抽象的,本篇文章我们开始实战,讲解流的各个方法以及各种操作 没有看过上篇文章的可以先点击进去学习一下 简洁又快速地处理集 ...

  9. java8 Stream的实现原理 (从零开始实现一个stream流)

    1.Stream 流的介绍 1.1 java8 stream介绍 java8新增了stream流的特性,能够让用户以函数式的方式.更为简单的操纵集合等数据结构,并实现了用户无感知的并行计算. 1.2  ...

  10. java8 Stream语法详解

    些Stream的例子可能让你产生疑惑,本文将会详细讲解Stream的使用方法(不会涉及Stream的原理,因为这个系列的文章还是一个快速学习如何使用的). 1. Stream初体验 我们先来看看Jav ...

最新文章

  1. 技术18期:数据安全之加密与实现
  2. GitHub上创建组织
  3. 错误记录集锦(遇到则记下)
  4. spring boot 日志乱码_3. Spring Boot日志
  5. 【数据分析就业实战】——缺失值的常见处理方法
  6. (26)Verilog HDL循环语句:repeat
  7. 网站项目管理规范手册
  8. CentOS 7使用yum安装MYSQL
  9. 熊猫to_csv()–将DataFrame转换为CSV
  10. maven内存不足:Unexpected error occurred: Not enough memory to allocate buffers for rehashing Java heap
  11. LeetCode:81. Search in Rotated Sorted Array II
  12. 计算机画图橡皮擦怎么扩大,大师为你演示win7系统画图工具中改变橡皮擦大小的图文教程...
  13. FSA-Net环境配置
  14. 云虚拟主机bch 和 云服务器bcc,虚拟主机bch和云服务器bcc
  15. springboot+Vue整合Luckysheet,实现在线编辑Excel表格
  16. 人工神经网络课后题答案,人工神经网络原理答案
  17. 软件测试项目管理平台
  18. 网页设计基础学习(一)
  19. vue 的计算属性报错Computed property “disa“ was assigned to but it has no setter.
  20. spring boot 图文验证码(Kaptcha)使用

热门文章

  1. 数据库日志文件(databasename_log.ldf)太大 如何清除
  2. 关于断点续传的那些事
  3. Eclipse切换IDE界面语言
  4. java获取字符串实际编码_Java获取字符串编码方式
  5. MyBatis源码阅读(二) --- 执行流程分析
  6. 【Hoxton.SR1版本】Spring Cloud Gateway网关初体验
  7. 【Java必备技能二】防止表单重复提交方法
  8. 设计模式 (十七) 迭代器模式
  9. Set集合之HashSet添加的数据是如何保证不重复的
  10. 异常的分类以及什么异常触发回滚