玩转Stream流

目录

前言:    

一、中间操作

二、终止操作

三、Stream中间操作使用的灵魂-函数式接口


前言:    

       Stream分为源source,中间操作,终止操作。流的源可以是一个数组、一个集合、一个生成器方法、一个IO通道等等。一个流可以有零个或多个中间操作、每一个中间操作都会返回一个新的流,供下一个操作使用。一个流只会有一个终止操作。

      到底如何区分中间操作和终止操作,中间操作的入参到底如何写。

一、中间操作

     返回值类型仍然是 Stream 接口自身类型的方法(除了终止操作外,其余方法均为中间操作)

     常用API 

  1. 过滤filter
  2. 去重distinct
  3. 排序sorted
  4. 截取limit、skip
  5. 转化map、flatMap
  6. 其他peek

二、终止操作

     返回值类型不再是 Stream 接口自身类型的方法。

     常用API

  1. 循环forEach
  2. 计算min、max、count、average
  3. 匹配anyMatch、allMatch、noneMatch、findFirst、findAny
  4. 汇聚reduce
  5. 收集器toArray、collect

三、Stream中间操作使用的灵魂-函数式接口

      之前一直没有搞清楚中间操作常用api中的入参到底该怎么写,想要知道怎么写得了解下面的常用函数式接口,中间操作的入参大都是这些函数式接口,而我们的入参是实现这些函数式接口的行为

  1. Suppiler 代表一个输出
  2. Consumer代表一个输入
  3. BiConsumer 代表两个输入
  4. Function代表一个输入一个输出(一般输入和输出类型不同)
  5. UnaryOperator代表一个输入一个输出(输入和输出类型相同)
  6. Predicate 代表一个输入一个输出(接受一个输入参数 ,返回一个布尔值结果)
  7. BiFunction 代表两个输入、一个输出(一般输入和输出类型不同)
  8. BinaryOperator 代表两个输入一个输出(输入和输出类型相同)
  9. 其他函数式接口见Java 8 函数式接口 | 菜鸟教程

举个例子比如中间操作map

    /**
     * Returns a stream consisting of the results of applying the given
     * function to the elements of this stream.
     *
     * <p>This is an <a href="package-summary.html#StreamOps">intermediate
     * operation</a>.
     *
     * @param <R> The element type of the new stream
     * @param mapper a <a href="package-summary.html#NonInterference">non-interfering</a>,
     *               <a href="package-summary.html#Statelessness">stateless</a>
     *               function to apply to each element
     * @return the new stream
     */
    <R> Stream<R> map(Function<? super T, ? extends R> mapper);

看下入参不难发现,入参是函数式接口Function,代表一个输入,一个输出(一般输入和输出类型不同)类型根据自己需要来指定,如下例:一个输入为String类型,一个输出为Integer类型

    public static void main(String[] args) {
        Stream<String> original = Stream.of("100", "200", "300");
        Stream<Integer> result = original.map(str -> Integer.parseInt(str));
        result.forEach(System.out::println);
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值