Java—JDK8新特性—Steam流

目录

5. Steam流

5.1 什么是Steam流        

5.2 为什么要去使用Steam流

5.3 什么是Steam流

5.4 Stream流使用步骤

5.5 创建Steam流的方法

5.6 终止操作

5.6.1 迭代

5.6.2 匹配

5.6.3 查找

5.6.4 统计


5. Steam流

5.1 什么是Steam流        

        在JDK 8中提供了Stream API,把真正的函数式编程风格引入到Java中,它可以极大提供Java程序员的生产力,让程序员写出高效率、干净、简洁的代码
        Stream是JDK 8中处理集合的关键抽象概念,它可以指定你希望对进行的操作,可以执非常复杂查找、过滤和映射数据等。使用
        Stream APl对集合数据进行操作,就类似于使用SQL执行的数据库查询。也可以使用Stream API来并行执行操作。简而言之,StreamAPI提供了一种高效且易于使用的处理数据的方式。

5.2 为什么要去使用Steam流

        可以极大的简化开发


5.3 什么是Steam流


        Stream是数据渠道,用于操作数据源(如:集合、数组等)所生成的元素序列。

特别注意:集合是数据,Stream是计算
注意:

  • 1.Stream 不会存储元素
  • 2.Stream 不会改变源对象,而是返回一个持有结果的新Stream
  • 3.Stream 操作是延迟执行的,这意味着它们会等到需要结果时才执行

5.4 Stream流使用步骤

        通过以下几个步骤来完成:

  • 1.创建Stream:一个数据源(如:集合、数组),获取一个流
  • 2.中间操作:一个中间操作链,对数据源的数据进行处理
  • 3.终止操作:一旦执行终止操作,就执行中间操作链,并产生结果,之后不会再被使用

5.5 创建Steam流的方法

        以下3种方式来创建:

  • 通过Collection的stream 默认方法获取
  • 通过Stream接口的静态方法of 获取
  • 通过Arrays中的stream 获取
  • 创建无限流 使用Stream.iterate() 或者 Stream.generate()

5.6 终止操作

        当一个Stream方法执行之后,返回的结果不是Stream类型的时候,该操作为终止操作

        终止操作会消费流,会产生一个结果

        如果一个Stream流被消费之后,这个Stream流就不用重新使用

5.6.1 迭代

        迭代流中的数据使用方法是forEach()方法

public class StreamForEachDemo1 {
    /**
     * Stream 终止操作中的迭代方法,使用forEach()方法
     * @param args
     */
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        Collections.addAll(list,"Java ","C ","C++ ","Python ","Go ");
        list.stream().forEach(System.out::print);
    }
}

5.6.2 匹配

        判断数据是否匹配指定的条件,使用Match相关的方法,返回值类型为boolean

方法名描述
allMatch(Predicate p)全部元素满足条件,则返回true,否则返回false
anyMatch(Predicate p)

只要有一个满足条件,则返回true;

全部元素不满足条件返回false

noneMatch(Predicate p)全部元素不满足条件,则返回true,否则返回false

public class StreamMatchDemo {

    @Test
    public void testAllmatch() {
        Stream<Integer> stream = Stream.of(1,2,7,8,9,11);
        /**
         * 判断所有元素 是否 都大于0
         *  只要有一个元素不符合条件,就返回false
         *  必修全部元素都符合条件,才能返回true
         */
        Boolean result1 = stream.allMatch(s -> s>0);
        System.out.println("result1:" + result1); //result1:true
    }

    @Test
    public void testAnymatch() {
        Stream<Integer> stream = Stream.of(1,2,7,8,9,11);
        /**
         * 判断所有元素 是否 都大于10
         *  只要有一个元素符合条件,就返回true
         *  必修全部元素都不符合条件,才能返回false
         */
        Boolean result2 = stream.anyMatch(s -> s>10);
        System.out.println("result2:" + result2); //result2:false
    }
    @Test
    public void testNoneMatch() {
        Stream<Integer> stream = Stream.of(1,2,7,8,9,11);
        /**
         * 判断所有元素 是否 都大于10
         *  全部元素,不满足条件,就返回true
         *  否则,返回false
         */
        Boolean result3 = stream.noneMatch(s -> s>10);
        System.out.println("result3:" + result3); //result3:false
    }
}

5.6.3 查找

        找到某些数据,使用find相关的方法,返回类型为Optional<T>

方法名描述
findFirst()返回找到的第一个元素
findAny()返回当前流中的任意元素


/**
 * 终止操作 中的 查找 使用find相关的方法
 * 1.findFirst 用于查找第一个匹配的元素
 * 2.findAny  用于在流中查找能匹配的元素 一般用于并行流
 *
 */
public class StreamFindDemo {
    @Test
    public void testFindFirst() {
        Stream<Integer> numbers = Stream.of(444,45,2,3,45,6,8,77,99);

        Optional<Integer> numbersFirst = numbers.findFirst();
        System.out.println(numbersFirst); //Optional[444]
        System.out.println(numbersFirst.get()); //444
    }

    @Test
    public void testFinfAny() {
        Stream<Integer> numbers = Stream.of(666,45,2,3,45,6,8,77,99);
        Optional<Integer> numbersAny = numbers.findAny();
        System.out.println(numbersAny); //Optional[666]
        System.out.println(numbersAny.get()); //666
    }
}

5.6.4 统计

方法名描述
count()返回流中元素的总数
max(Comparator c)返回流中的最大值
min(Comparator c)返回流中的最小值
/**
 * Stream流终止查找 中 统计
 * 1.count :返回流中元素的总数
 * 2.max(Comparator c) :返回流中的最大值
 * 3.min(Comparator c) :返回流中的最小值
 */
public class StreamMaxAndMinDemo {
    @Test
    public void testCount() {
        Stream<Integer> numbers = Stream.of(1,2,3,4,5,6,7,8,9,100);
        long count = numbers.count();
        System.out.println(count); //10
    }
    @Test
    public void testMax() {
        Stream<Integer> numbers = Stream.of(1,2,3,4,5,6,7,8,9,100);
        Optional<Integer> max = numbers.max(Integer::compareTo);
        System.out.println(max); //Optional[100]
        System.out.println(max.get()); //100
    }
    @Test
    public void testMin() {
        Stream<Integer> numbers = Stream.of(1,2,3,4,5,6,7,8,9,100);
        Optional<Integer> min = numbers.min(Integer::compareTo);
        System.out.println(min); //Optional[1]
        System.out.println(min.get()); //1
    }
}

本章节未完结,待更新!

感谢支持 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值