Java8流操作之筛选与切片

  • 筛选:用谓词筛选(一个返回boolean的函数)筛选,筛选出各不相同的元素

    • 用谓词筛选:Stream支持的filter方法,接受一个谓词作为参数,返回所有符合要求元素的流
      List list = Lists.newArrayList(1, 3, 10, 2, 8, 4, -10, -5);
      //筛选出大于等于4并是偶数的元素后迭代输出
      list.stream().filter(i -> i >= 4 && i % 2 == 0).forEach(System.out::println);
      //输出结果:10 8 4
      
    • 去重:Stream可以采用distinct方法去除流中重复元素(根据流所生成元素的hashCode和equals方法实现)的流
      List list = Lists.newArrayList(1, 3, 3, 2, -5, 4, -10, -5);
      //筛选出所有奇数去重后输出
      list.stream().filter(i -> i % 2 != 0).distinct().forEach(System.out::println);
      //输出结果:1 3 -5
      
  • 切片:忽略流中的头几个元素或截取流中的前几个元素

    • 从前往后截取:Stream的limit(n)方法,返回一个不超过n个元素的流,有序集合返回从下标0开始元素组成的流,而无序集合则返回无序的流,如果流中的元素不够n则返回符合要求的所有元素
      log.debug("有序集合");
      List list = Lists.newArrayList(1, 3, 3, 2, -5, 4, -10, -5);
      list.stream().filter(i -> i > 0).limit(2).forEach(System.out::println);
      //输出结果:1 3
      log.debug("无序集合");
      Set set = Sets.newHashSet(1, 3, 2, -5, 4, -10, -5);
      set.stream().filter(i -> i > 0).limit(2).forEach(System.out::println);
      //输出结果:1 2
      
    • 跳过元素:Stream的skip(n)方法,返回一个跳过前n个元素的流,如果流中元素不足n个,则返回一个空流
      log.debug("有序集合");
      List list = Lists.newArrayList(1, 3, 3, 2, -5, 4, -10, -5);
      list.stream().filter(i -> i > 0).skip(2).forEach(System.out::println);
      //输出结果:3 2 4
      log.debug("无序集合");
      Set set = Sets.newHashSet(1, 3, 2, -5, 4, -10, -5);
      set.stream().filter(i -> i > 0).skip(2).forEach(System.out::println);
      //输出结果:3 4
      

更多文章:
CSDN博客
简书博客
公众号:代码小搬运
Java8流操作之筛选与切片_第1张图片

你可能感兴趣的:(Java开发,#,Java8)