java8的stream用法

stream用法

stream主要是对集合的各种操作,极大的简化了编程,并且可读性非常强

stream流的数据源,可以是数组或集合,对于stream流的操作属于链式操作,也就是有中间操作和结尾操作

中间操作:如filter(),map(),limit()等,中间流的操作完成会生成一个新的流,以便进行后面的操作

结尾操作:如count(),allMatch(),collect()等

中间操作不会立马执行,等到结尾操作时同时执行

stream流的创建:

集合可以直接使用stream()和parallelStream()方法

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5,4,5,6,7);
List<Integer> stream1 = list.stream().collect(Collectors.toList());//串行流
List<Integer> stream2 = list.parallelStream().collect(Collectors.toList());并行流

数组可以用Arrays.stream()方法

Integer[] nums = new Integer[3];
Stream<Integer> stream = Arrays.stream(nums);

还可以使用Stream的of(),iterate(),generate()方法创建流

Stream<Integer> stream = Stream.of(1,2,3,4,5,6);
Stream<Integer> stream2 = Stream.iterate(0, (x) -> x + 2).limit(5);
Stream<Double> stream3 = Stream.generate(Math::random).limit(5);

stream流的使用:

  • 过滤

    filter()方法,需要传入一个函数,这个函数需要返回布尔值,将布尔值为true的值筛选出来,

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5,4,5,6,7);
    List<Integer> collect = list.stream().filter(o -> o > 2).collect(Collectors.toList());
    
  • 分页

    skip()和limit()配合使用,skip()从多少个元素开始获取(从0开始),limit()获取多少个

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5,4,5,6,7);
    List<Integer> collect = list.stream().skip(1).limit(3).collect(Collectors.toList());
    
  • 去重

    distinct()方法,内部通过hashcode()和equals()方法实现去重

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5,4,5,6,7);
    List<Integer> collect = list.stream().distinct().collect(Collectors.toList());
    
  • 映射

    map()方法,接受一个函数,该函数会作用到流的每一个元素上面

    flatMap()方法,接受一个函数,将流中的每个值都换成另一个流,然后把所有流连接成一个流

    List<String> list1 = Arrays.asList("aa/bb/cc", "dd/ee/ff");
    Stream<String> stringStream = list1.stream().map(o -> o.replaceAll("/", ","));
    list1.stream().flatMap(o->{
        String[] split = o.split(",");
        Stream<String> s = Arrays.stream(split);
        return s;
    });
    
  • 匹配

    allMatch:接收一个函数,当流中每个元素都符合时才返回true,否则返回false
    noneMatch:接收一个函数,当流中每个元素都不符合时才返回true,否则返回false
    anyMatch:接收一个函数,只要流中有一个元素满足时则返回true,否则返回false
    findFirst:返回流中第一个元素

    findAny:返回流中的任意元素
    count:返回流中元素的总个数
    max:返回流中元素最大值
    min:返回流中元素最小值

  • 组合

    reduce()方法,主要作用是把 Stream 中的元素组合起来,其中reduce有两种用法,一种是没有初始值,一种是有初始值

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5,4,5,6,7);
    Integer v = list.stream().reduce((x1, x2) -> x1 + x2).get();//没有初始值
    Integer v1 = list.stream().reduce(10, (x1, x2) -> x1 + x2);//有初始值
    
  • 收集

    collect()方法,可以将流转化成数组或者集合等

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5,4,5,6,7);
    List<Integer> collect = list.stream().filter(o -> o > 2).collect(Collectors.toList());
    

    Collectors 是一个收集器的工具类,内置了一系列收集器实现,比如说 toList() 方法将元素收集到一个新的 java.util.List 中;比如说 toCollection()方法将元素收集到一个新的 java.util.ArrayList 中;比如说 joining()方法将元素收集到一个可以用分隔符指定的字符串中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值