当前位置:   article > 正文

Java8新特性

java8

一、Stream流

1. Stream简介

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

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

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

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

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

2. Stream用法

2. 1获取流

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

2.2 流操作

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

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

简单来说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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/1006254
推荐阅读
相关标签
  

闽ICP备14008679号