java8新特性之stream流

Stream 流是 Java 8 提供给开发者一套新的处理集合的API,他把我们将要处理的集合作为流,就像流水线一样,我们可以对其中的元素进行筛选,过滤,排序等中间操作,只不过这种操作更加简洁高效。

Stream的创建:
  • 1.可以通过Collection系列的集合提供的stream()或者parallelStream()方法,集合的stream方法创建的是串行流,parallelStream方法创建的是并行流(并行流就是多线程进行操作,这个时候就要考虑线程安全问题了)
  • 2.可以通过Arrays.stream()获取数组流
  • 3.通过Stream类中的静态方法of()可以创建流对象
  • 当创建一个无限流使用Stream.iterate()方法,是一个死循环

//Stream 的创建


    //1.通过集合的stream()方法创建串行流
    ArrayList<Object> list = new ArrayList<>();
    Stream<Object> stream = list.stream();
    //2.也可以通过集合的parallelStream创建并行流
    Stream<Object> parallelStream = list.parallelStream();
    //3.通过Arrays.stream(T[] t),将数组转换成流
    IntStream stream1 = Arrays.stream(new int[10]);
    //4.通过Stream的静态方法of创建流
    Stream<String> stringStream = Stream.of("aaa", "bbb", "ddd", "ccc");
    
    //创建无限流 迭代   
    Stream<Integer> iterate = Stream.iterate(1, (x) -> x + 2);
    iterate.limit(10).forEach(System.out::println);//生成奇数从一开始往后的10位

    //生成
    Stream.generate(()->(int)(Math.random()*100))//随机生成10个100以内的int类型数
            .limit(10)
            .forEach(System.out::println);
Stream的中间操作

多个中间操作可以连接起来形成一个流水线,除非流水线线上触发终止操作,否则中间操作就不会执行任何处理,并不会显示处理结果。而在终止操作时一次性全部处理,称为惰性求值。

  • 筛选与切片

filter-接收Lambda,从流中排除某些元素
limit–截断流,使其元素不超过给定数量
skip(n) – 跳过元素,返回一个扔掉了前n个元素的流。若流中的元素个数小于n,则返回null,与limit()互补
distinct–筛选通过流所生成元素的hashCode(),equals()方法来去掉重复的元素

public class StreamAPITest {
   
    List<Employee> employees = Arrays.asList(
            new Employee("小明", 12000, 32),
            new Employee("小红", 8000, 23),
            new Employee("小刚", 5000, 19),
            new Employee("小凉", 7000, 40),
            new Employee("小凉", 7000, 40),
            new Employee("小凉", 7000, 40)
    );

    @Test
    public void test2() {
   
        //filter是内部迭代,
        //也就是StreamAPI内部实现的迭代不需要使用者再次手写迭代
        employees.stream()
                .filter((e) -> {
   
                    //System.out.println("进入过滤器");
                    return e.getSalary() > 7000.0;
                })
                .forEach((e) -> System.out.println(e.getSalary()));
        System.out.println("-----------------------");


        //测试limit(n)取前n个元素
        employees.stream()
                .limit(3)
                .forEach((e) -> System.out.println(e));

        System.out.println("-----------------------");
        //skip(n)测试  舍掉前n个元素,去剩下后面的
        employees.stream()
                .
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值