java8 Stream接口简单使用
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接口简单使用相关推荐
- Java8 Stream接口流式方法:map操作、filter操作以及flatMap操作
点击关注公众号,利用碎片时间学习 关于stream 流式操作,在rt.jar 包里面,ReferencePipeline管道方式操作数据 下面集成所有操作方法,利用这些流,处理大数据的方式,效率提升明 ...
- java8 .stream().anyMatch / allMatch / noneMatch用法
java8 stream接口终端操作 anyMatch,allMatch,noneMatch anyMatch:判断的条件里,任意一个元素成功,返回true allMatch:判断条件里的元素,所有的 ...
- JAVA8 BiConsumer 接口
这个接口跟<JAVA8 Consumer接口>很像,表达的想法也是一致的,都是消费的意思,我们先看下接口定义 @FunctionalInterface public interface B ...
- java stream toarray_java8 stream接口 终端操作 toArray操作
对于中间操作和终端操作的定义,请看<JAVA8 stream接口 中间操作和终端操作>,这篇主要讲述的是stream的toArray操作,我们先看下函数的定义以及实现 Object[] t ...
- Java8 Stream 函数式接口
在这里插入图片描述 先贴上几个案例,水平高超的同学可以挑战一下: 从员工集合中筛选出salary大于8000的员工,并放置到新的集合里. 统计员工的最高薪资.平均薪资.薪资之和. 将员工按薪资从高到低 ...
- Java8 Stream流式操作接口详解
stream是用于集合使用的流式操作,可使用collection.stream获取流 default Stream<E> stream() {return StreamSupport.st ...
- java8 stream遍历_Java8新特性:Stream流详解
1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel agg ...
- 简洁又快速地处理集合——Java8 Stream(下)
上一篇文章我讲解 Stream 流的基本原理,以及它与集合的区别关系,讲了那么多抽象的,本篇文章我们开始实战,讲解流的各个方法以及各种操作 没有看过上篇文章的可以先点击进去学习一下 简洁又快速地处理集 ...
- java8 Stream的实现原理 (从零开始实现一个stream流)
1.Stream 流的介绍 1.1 java8 stream介绍 java8新增了stream流的特性,能够让用户以函数式的方式.更为简单的操纵集合等数据结构,并实现了用户无感知的并行计算. 1.2 ...
- java8 Stream语法详解
些Stream的例子可能让你产生疑惑,本文将会详细讲解Stream的使用方法(不会涉及Stream的原理,因为这个系列的文章还是一个快速学习如何使用的). 1. Stream初体验 我们先来看看Jav ...
最新文章
- 技术18期:数据安全之加密与实现
- GitHub上创建组织
- 错误记录集锦(遇到则记下)
- spring boot 日志乱码_3. Spring Boot日志
- 【数据分析就业实战】——缺失值的常见处理方法
- (26)Verilog HDL循环语句:repeat
- 网站项目管理规范手册
- CentOS 7使用yum安装MYSQL
- 熊猫to_csv()–将DataFrame转换为CSV
- maven内存不足:Unexpected error occurred: Not enough memory to allocate buffers for rehashing Java heap
- LeetCode:81. Search in Rotated Sorted Array II
- 计算机画图橡皮擦怎么扩大,大师为你演示win7系统画图工具中改变橡皮擦大小的图文教程...
- FSA-Net环境配置
- 云虚拟主机bch 和 云服务器bcc,虚拟主机bch和云服务器bcc
- springboot+Vue整合Luckysheet,实现在线编辑Excel表格
- 人工神经网络课后题答案,人工神经网络原理答案
- 软件测试项目管理平台
- 网页设计基础学习(一)
- vue 的计算属性报错Computed property “disa“ was assigned to but it has no setter.
- spring boot 图文验证码(Kaptcha)使用