Java8新特性

一、Stream流

1. Stream简介

Stream允许我们以声明式的方式处理数据集合,可以将Stream看作是遍历数据集合的高级迭代器。Stream 与Lambda表达式结合使用,将使编码效率大大提高,可读性增强。

注意:Stream与IO中的InputStream/OutputStream是不同的概念

操作案例:在这里插入图片描述使用stream将集合中的手机按照序号num从小到大排序:
在这里插入图片描述
结果:
在这里插入图片描述
Stream流的操作顺序

在这里插入图片描述
Stream语法

| stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect|

2. Stream用法

2. 1获取流

  1. Collection接口下的stream()获取流

在这里插入图片描述

List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
  1. 使用 Arrays 中的 stream() 方法,将数组转成流

在这里插入图片描述

Integer[] arr= new Integer[10]; 
Stream<Integer> stream = Arrays.stream(arr);
  1. 使用 Stream 中的静态方法:of()

在这里插入图片描述

Stream<Integer> stream = Stream.of(4,3,2,7,5,1,6);
  1. 使用 BufferedReader.lines() 方法,将每行内容转成流

在这里插入图片描述

BufferedReader reader=new BufferedReader(new FileReader("test.txt")); 
Stream<String> lineStream = reader.lines();

2.2 流操作

流操作可以分为中间操作终端操作

List<Apple> apples = 
			applestore .stream() 获得流
			 		   .filter(a -> a.getColor().equals("红色")) 中间操作
			 		   .collect(Collectors.toList()); 终端操作

简单来说Stream的流程就是
数据源->中间操作->终端操作->结果

中间操作
  • filter():过滤流中的某些元素
  • sorted():自然排序,流中元素需实现Comparable接口
  • distinct():去除重复元素
  • limit(n):获取n个元素
  • skip(n):跳过n个元素,配合limit(n)可实现分页
  • map():将其映射为一个新的元素
    在这里插入图片描述
    在这里插入图片描述
    map():
  1. 对集合中的每一个元素求平方
    在这里插入图片描述
    在这里插入图片描述
    2.使用map()将String型的整数转为Integer型的整数
    在这里插入图片描述
    在这里插入图片描述
终端操作
  • forEach():遍历流中的元素
  • toArray():将流中的元素倒入一个数组中
  • Min():返回流中元素的最小值
  • Max():返回流中元素的最大值
  • count():返回流中元素的总个数
  • reduce():所有元素求和
  • anyMatch():接收一个Predicate函数,只要流中有一个元素满足条件则返回true,否则返回false
  • allMatch():接收一个Predicate函数,当流中所有元素都符合条件时才返回true,否则返回false
  • findFirst():返回流中的第一个元素
  • collect():将流中的元素倒入一个集合(Collection/Map)
/**
         * 终端操作 -- 结果
         */
        Integer[] arr = new Integer[]{
   3,1,5,7,2,6,4,4,0};
        Object[] arr1 =  Arrays.stream(arr)
                .distinct()
                .sorted()
                .toArray();        //toArray()将流中元素倒入Object数组中
        //forEach()
        Arrays.stream(arr1).forEach(e-> System.out.print(e+" "));
        //count 统计
        Long count = Arrays.stream(arr).count();
        System.out.println(count);
        //anyMatch 流中任意一个元素符合条件时返回true
        boolean any = Arrays.stream(arr).anyMatch((e)->{
   return e>3;});
        System.out
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值