Java8之流操作

java.util.stream.Stream中的Stream接口定义了许多操作。它们可分为两大类:

        List list = Lists.newArrayList(new Orange(1.2, "红"), new Orange(2.3, "黄"), new Orange(3.2, "绿"),
                new Orange(0.2, "青"), new Orange(0.5, "蓝"));
        List collect =
                list.stream().filter(orange -> orange.getWeight() > 1).sorted((orange1, orange2) -> orange2.getWeight() > orange1.getWeight() ? 0 : -1).map(Orange::getColor).limit(2).collect(Collectors.toList());
        log.debug(collect.toString());
        //输出:[绿, 黄]
  • 操作简介,流的使用一般包括
  1. 一个数据源来执行一个查询;
  2. 一个中间操作链,形成一条流的流水线;
  3. 一个终端操作,执行流水线并生成结果。
  • 中间操作:可以连接起来的流操作称作为中间操作。

    • 诸如collect操作前的filter或sorted等中间操作都会返回另外一个流。这让多个操作可以连接起来形成一个查询。重要的是,除非流水线上触发一个终端操作,否则中间操作不好执行任何处理。这是因为中间操作都可以合并起来,在终端操作时一次性全部处理。
    操作 返回类型 操作参数 函数描述符 解释
    filter Stream Predicate T -> boolean 过滤数据源中的数据,满足条件的进入后面的流水线
    sorted Stream Comparator (T, T) -> int 对流中的数据进行排序,注意返回大于等于0的自然数表示此数据排在前面
    map Stream Function T -> R 将流中的数据类型转换成其它类型返回到流水线中
    limit Stream 取流中的几条数据,相当于Mysql中的limit
    distinct Stream 去重,相当于Mysql中的distinct
  • 终端操作:关闭流的操作称为终端操作。

    • 终端操作会从流的流水线生成结果,其结果是任何不适流的值。
    操作 目的
    forEach 消费流中的每个元素并对其应用Lambda。()-{},这一操作返回void
    count 返回流中元素的个数。这一操作返回long
    collect 把流归约成一个集合,List、Map、Set等

更多文章:
CSDN博客
简书博客
公众号:代码小搬运
代码小搬运.jpg

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