Java8 新特性 Steam() 中间有状态操作

中间有状态操作

Java8 新特性 Stream 练习实例

??中间操作,就是把数据处理成自己想要的类型,并且有状态操作,是在所有的数据基础上进行操作的。比如dictinct(去重),sorted(排序)....

所有的有状态操作:

去重 distinct
跳过 skip
截断 limit
排序 sorted

去重 distinct

//找出所有的对象的类型
@Test
public void test1() {
    list.stream()
        //找出所有的对象的类型
        .map(Sku::getSkuCategory)
        //然后去重
        .distinct()
        .forEach(System.out::println);
}
/*
ELECTRONICS
CLOTHING
SPORTS
BOOKS
*/

跳过 skip

/**
 * 跳过 skip
 */
@Test
public void test2() {
    //没有过滤
    list.stream()
            .forEach(item -> System.out.println(
                    JSON.toJSONString(
                            item.getSkuId(), true)));

    long count = list.stream().count();
    System.out.println("总共有" + count + "个对象");

    //跳过 skip
    list.stream()
            //跳过前7个
            .skip(7)
            .forEach(item -> System.out.println(
                    JSON.toJSONString(
                            item.getSkuId(), true)));
    /**
     * 输出的结果:
     * 100001
     * 100002
     * 100003
     * 100004
     * 100005
     * 100006
     * 100007
     * 100008
     * 100009
     * 总共有9个对象
     * 100007
     * 100008
     * 从1开始,到第7个开始获取
     */
    }

截断 limit

/**
 * 截断 limit
 */
@Test
public void limitTest() {
    list.stream()
            //截断
            .limit(1)
            //输出
            .forEach(item ->
                    System.out.println(
                        JSON.toJSONString(item,true)));

    /**
     * 只截断了第一个
     * 剩下来的全部都丢弃
     *  "skuCategory":"ELECTRONICS",
     *  "skuId":100001,
     *  "skuName":"无人机",
     *  "skuPrice":4999.0,
     *  "totalNum":1,
     *  "totalPrice":4999.0
     *
     */
}

排序 sorted

/**
     * sorted 排序
     */
    @Test
    public void sortedTest() {
        List<Double> collect = list.stream()
                //排序
                .sorted(Comparator.comparing(Sku::getSkuPrice))
                //映射成只有价格
                .map(Sku::getSkuPrice)
                //把经果收集成价格列表
                .collect(Collectors.toList());
        //循环输出出来
        collect.forEach(System.out::println);
        /**
         * //价格升序排列,倒序排列:reversed 在 comparing 加上去
         * 78.2
         * 79.8
         * 85.5
         * 149.0
         * 409.0
         * 528.0
         * 2299.0
         * 2699.0
         * 4999.0
         */

细节决定成败!

个人愚见,如有不对,恳请扶正!

原文地址:https://www.cnblogs.com/xdtg/p/12000528.html

时间: 2024-08-29 19:41:02

Java8 新特性 Steam() 中间有状态操作的相关文章

Java8 新特性 Stream 无状态中间操作

无状态中间操作 Java8 新特性 Stream 练习实例 中间无状态操作,可以在单个对单个的数据进行处理.比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)... 过滤 filter 映射 map 扁夹化 flatMap 遍厉 peek 过滤 filter 接收一个谓词断言,boolean Pridicate< T > 根据返回值类型来确定是否过滤这一条属性. // 过滤 filter @Test public void filterTest() { list.stre

Java8 新特性之集合操作Stream

Java8 新特性之集合操作Stream Stream简介 Java 8引入了全新的Stream API.这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同. stream是对集合对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作,或者大批量数据操作. 为什么要使用Stream 函数式编程带来的好处尤为明显.这种代码更多地表达了业务逻辑的意图,而不是它的实现机制.易读的代码也易于维护.更可靠.更不容易出错. 高端 使用实例: 测试数据:

Java8 新特性 Stream 短路终端操作

短路终端操作 Java8 新特性 Stream 练习实例 传入一个谓词,返回传为boolean,如果符合条件,则直接结束流. 匹配所有 allMatch 任意匹配 anymMatch 不匹配 noneMatch 查找首个 findFirst 查找任意 findAny 匹配所有 allMatch //匹配所有 allMatch @Test public void allMatchTest() { boolean b = list.stream() //所有的商品价格都大于40 .allMatch(

Java8 新特性 Stream 非短路终端操作

非短路终端操作 Java8 新特性 Stream 练习实例 非短路终端操作,就是所有的元素都遍厉完,直到最后才结束.用来收集成自己想要的数据. 方法有: 遍厉 forEach 归约 reduce 最大值 max 最小值 min 聚合 collect 计数 count 遍厉 forEach //遍厉 forEach @Test public void forEachTest() { list.stream() .forEach(iter -> //以json格式输出 System.out.prin

【Java学习笔记之二十八】深入了解Java8新特性

前言: Java8 已经发布很久了,很多报道表明java8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java 8 – Lambdas and Concurrency.Java 8 Date Time API Tutorial : LocalDateTime和Abstract Class Versus Interface in the JDK 8 Era.本文还参考了一些其他资料,例如:15 Must Read

乐字节-Java8新特性-接口默认方法之Stream流(下)

接上一篇:<Java8新特性之stream>,下面继续接着讲Stream 5.流的中间操作 常见的流的中间操作,归为以下三大类:筛选和切片流操作.元素映射操作.元素排序操作: 操作 描述 筛选和切片 filter(T -> boolean):保留 boolean 为 true 的元素 limit(long n):返回前 n 个元素 skip(long n):去除前 n 个元素 distinct():去除重复元素,这个方法是通过类的 equals 方法来判断两个元素是否相等的 映射 map

Java8 新特性之流式数据处理

一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现. 比如我们希望对一个包含整数的集合中筛选出所有的偶数,并将其封装成为一个新的List返回,那么在java8之前,我们需要通过如下代码实现: List<Integer> evens = new ArrayList<>(); for (final Integer num : nums) { if (num % 2 =

java8 新特性精心整理

前言 越来越多的项目已经使用 Java 8 了,毫无疑问,Java 8 是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和 JVM 等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子说明在什么场景下适合使用. 引用:本文参考了这两篇文章,加以自己的理解,整理成一份最容易理解的 Java8 新特性文章,有少部分章节可能内容一致,但绝对不是抄袭,只是为了文章的完整性,大部分常用的地方加了我自己的理解和示例. https://blog.

java8 新特性精心整理(全)

前言 越来越多的项目已经使用 Java 8 了,毫无疑问,Java 8 是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和 JVM 等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子说明在什么场景下适合使用. 引用:本文参考了这两篇文章,加以自己的理解,整理成一份最容易理解的 Java8 新特性文章,有少部分章节可能内容一致,但绝对不是抄袭,只是为了文章的完整性,大部分常用的地方加了我自己的理解和示例. https://blog.