Stream流

概括自尚硅谷Java8新特性教程

了解:Stream流

本质:数据渠道,用于操作数据源(集合、数组等)所产生的元素序列。
应用:处理集合
分类:串行流stream()、并行流parallelStream()
特点:

  • Stream自己不会存储元素。
  • Stream不会改变源对象。相反,它们会返回一个持有结果的新Stream。
  • Stream操作是延迟执行的,即它们会等到需要结果的时候才执行。

创建Stream

  • 通过Collection系列集合提供的stream()或parallelStream()
List<String> list1 = new ArrayList<>();
Stream<String> stream1 = list1.stream();
  • 通过Arrays中的静态方法stream()获取数组流
MyObj[] m = new MyObj[10];
Stream<MyObj> stream1 = Arrays.stream(m);
  • 通过Stream类中的静态方法of()
Stream<String> s = Stream.of("aa","bb","cc");	//可变参数,你也可以传数组
  • 创建无限流
//迭代
Stream<Integer> s = Stream.iterate(0,(x) -> x+2);
/*
s.limit(10).forEach(System.out::println);	//0 2 4 6 8 10 12 14 16 18
*/
//生成
Stream.generate(() -> Math.random())

collect():将流转换为其他形式

了解:Collectors实用类

使用其方法,创建收集器的实例

//将流转换为List
List<String> list = employees.stream()
.map(MyObj::getName)
.collect(Collectors.toList());

//复杂情况:将流转换为HashSet
HashSet<String> ha = MyObj.stream()
.map(MyObj::getName)
.collect(Collectors.toCollection(HashSet::new));
收集其它数据
//求和
Long count = myObj.stream()
.collect(Collectors.counting());

//求最大值
Optional<MyObj> max = myObj.stream()
.collect(Collectors.maxBy((e1,e2) -> Double.compare(e1.getSalary(), e2.getSalary())));
分组
//简单分组
Map<Status, List<Employee>> map = myObj.stream()
.collect(Collectors.groupingBy(MyObj::getStatus));

//多级分组
Map<Status, Map<String, List<MyObj>>> map = myObj.stream()
.collect(Collectors.groupingBy(Employee::getStatus, Collectors.groupingBy((e) -> {
	if(((MyObj) e).getAge() <= 35) {
		return "青年"}else if(((MyObj) e).getAge() <= 50) {
		return "中年"}else return "老年";
)));
分区
//根据工资whether大于八千分区
Map<Boolean, List<MyObj>> map = myObj.stream()
.collect(Collectors.partitioningBy((e) -> e.getSalary() > 8000));

异常处理:计算返回结果为空(空指针异常)

返回结果有可能为空时,将其封装在Optional<泛型>

联动 with 数据库

【select】filter筛选,map映射
【排序】sorted()
【取第一个】findFirst()
【取任意一个】findAny()
【计算】count()
【最值】max()、min()
【分组】

联动:JavaScript的Array类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值