• 高效 告别996,开启java高效编程之门 3-8实战:常用中间操作演示之:遍历/排序


    1    重点

    peek方法的使用

    sorted方法的使用

    reversed方法的使用

    peek案例(无状态中间操作与forEach结合使用)  和  sorted案例(有状态中间操作与forEach结合使用)打印日志的区别

    2    实战演示之peek:
    package com.imooc.zhangxiaoxi.stream;
    
    import com.alibaba.fastjson.JSONObject;
    import com.imooc.zhangxiaoxi.lambda.cart.CartService;
    import com.imooc.zhangxiaoxi.lambda.cart.Sku;
    import com.imooc.zhangxiaoxi.lambda.cart.SkuCategoryEnum;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.List;
    
    /**
     * StreamOperator
     * 作用:演示各种流的操作
     * @author 魏豆豆
     * @date 2020/4/11
     */
    public class StreamOperator {
    
        private List<Sku> list;
        /**
         * 初始化购物车车
         */
        @Before
        public void init(){
            list = CartService.getSkuList();
        }
    
    
        /**
         * filter的方法使用
         *
         * 过滤出只有书籍的商品并进行打印
         */
        @Test
        public void filterTest(){
            list.stream()
                    //filter方法:如果条件为true则保留,否则过滤掉
                    .filter(sku -> sku.getSkuCategory().equals(SkuCategoryEnum.BOOKS))
                    //item(可以是其他变量):为该流的每个元素执行一个操作
                    .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
        }
    
        /**
         * map方法的使用
         *
         * 找出购物车中所有商品的名称并进行打印
         */
        @Test
        public void mapTest(){
            list.stream()
                    .map(sku -> sku.getSkuName())
                    .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
        }
    
        /**
         * flatMap方法的使用:将一个对象转换成一个流
         *
         * 找出购物车所有的商品名称并进行打印
         */
        @Test
        public void flatMap(){
            list.stream()
                    //注意:flatMap是对源处理为Stream流之后才能继续操作
                    .flatMap(sku -> Arrays.stream(sku.getSkuName().split("")))
                    .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
        }
    
        /**
         * peek方法使用:
         */
        @Test
        public void peek(){
            list.stream()
                    .peek((Sku)->System.out.println(Sku.getSkuName()))
                    //item(可以是其他变量):为该流的每个元素执行一个操作
                    //peek操作是中间操作,操作完后,流仍然可以使用,forEach是终端操作,操作后,流不能再被使用
                    //无状态的操作+终端操作(peek案例),就会从上到下依次执行,但是有状态的操作(sortTest案例),会先汇总,汇总之后,再循环;具体的区别通过peek案例和sortTest打印日志查看
                    .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
        }
    
    
        @Test
        public void sortTest(){
            list.stream()
                    .peek(Sku->System.out.println(Sku.getSkuName()))
                    //有reversed 反序从大到小 ,无reversed 正序从小到大
                    //sorted 有状态
                    .sorted(Comparator.comparing(Sku::getTotalPrice).reversed())
                    .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
        }
    
    }

    打印日志:

    无人机
    {
        "skuCategory":"ELECTRONICS",
        "skuId":2020001,
        "skuName":"无人机",
        "skuPrice":999.0,
        "totalNum":1,
        "totalPrice":999.0
    }
    T-shirt
    {
        "skuCategory":"CLOTHING",
        "skuId":2020002,
        "skuName":"T-shirt",
        "skuPrice":50.0,
        "totalNum":2,
        "totalPrice":100.0
    }
    人生的枷锁
    {
        "skuCategory":"BOOKS",
        "skuId":2020003,
        "skuName":"人生的枷锁",
        "skuPrice":30.0,
        "totalNum":1,
        "totalPrice":30.0
    }
    老人与海
    {
        "skuCategory":"BOOKS",
        "skuId":2020004,
        "skuName":"老人与海",
        "skuPrice":20.0,
        "totalNum":1,
        "totalPrice":20.0
    }
    剑指高效编程
    {
        "skuCategory":"BOOKS",
        "skuId":2020005,
        "skuName":"剑指高效编程",
        "skuPrice":288.0,
        "totalNum":1,
        "totalPrice":288.0
    }
    大头皮鞋
    {
        "skuCategory":"CLOTHING",
        "skuId":2020006,
        "skuName":"大头皮鞋",
        "skuPrice":300.0,
        "totalNum":1,
        "totalPrice":300.0
    }
    杠铃
    {
        "skuCategory":"SPROTS",
        "skuId":2020007,
        "skuName":"杠铃",
        "skuPrice":2000.0,
        "totalNum":1,
        "totalPrice":2000.0
    }
    ThinkPad
    {
        "skuCategory":"ELECTRONICS",
        "skuId":2020008,
        "skuName":"ThinkPad",
        "skuPrice":5000.0,
        "totalNum":1,
        "totalPrice":5000.0
    }
    
    Process finished with exit code 0
    3    实战演示之排序(sorted):
    package com.imooc.zhangxiaoxi.stream;
    
    import com.alibaba.fastjson.JSONObject;
    import com.imooc.zhangxiaoxi.lambda.cart.CartService;
    import com.imooc.zhangxiaoxi.lambda.cart.Sku;
    import com.imooc.zhangxiaoxi.lambda.cart.SkuCategoryEnum;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.List;
    
    /**
     * StreamOperator
     * 作用:演示各种流的操作
     * @author 魏豆豆
     * @date 2020/4/11
     */
    public class StreamOperator {
    
        private List<Sku> list;
        /**
         * 初始化购物车车
         */
        @Before
        public void init(){
            list = CartService.getSkuList();
        }
    
    
        /**
         * filter的方法使用
         *
         * 过滤出只有书籍的商品并进行打印
         */
        @Test
        public void filterTest(){
            list.stream()
                    //filter方法:如果条件为true则保留,否则过滤掉
                    .filter(sku -> sku.getSkuCategory().equals(SkuCategoryEnum.BOOKS))
                    //item(可以是其他变量):为该流的每个元素执行一个操作
                    .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
        }
    
        /**
         * map方法的使用
         *
         * 找出购物车中所有商品的名称并进行打印
         */
        @Test
        public void mapTest(){
            list.stream()
                    .map(sku -> sku.getSkuName())
                    .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
        }
    
        /**
         * flatMap方法的使用:将一个对象转换成一个流
         *
         * 找出购物车所有的商品名称并进行打印
         */
        @Test
        public void flatMap(){
            list.stream()
                    //注意:flatMap是对源处理为Stream流之后才能继续操作
                    .flatMap(sku -> Arrays.stream(sku.getSkuName().split("")))
                    .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
        }
    
        /**
         * peek方法使用:
         */
        @Test
        public void peek(){
            list.stream()
                    .peek((Sku)->System.out.println(Sku.getSkuName()))
                    //item(可以是其他变量):为该流的每个元素执行一个操作
                    //peek操作是中间操作,操作完后,流仍然可以使用,forEach是终端操作,操作后,流不能再被使用
                    //无状态的操作+终端操作(peek案例),就会从上到下依次执行,但是有状态的操作(sortTest案例),会先汇总,汇总之后,再循环;具体的区别通过peek案例和sortTest打印日志查看
                    .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
        }
    
    
        @Test
        public void sortTest(){
            list.stream()
                    .peek(Sku->System.out.println(Sku.getSkuName()))
                    //有reversed 反序从大到小 ,无reversed 正序从小到大
                    //sorted 有状态
                    .sorted(Comparator.comparing(Sku::getTotalPrice).reversed())
                    .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
        }
    
    }

    打印日志:

    无人机
    T-shirt
    人生的枷锁
    老人与海
    剑指高效编程
    大头皮鞋
    杠铃
    ThinkPad
    {
        "skuCategory":"ELECTRONICS",
        "skuId":2020008,
        "skuName":"ThinkPad",
        "skuPrice":5000.0,
        "totalNum":1,
        "totalPrice":5000.0
    }
    {
        "skuCategory":"SPROTS",
        "skuId":2020007,
        "skuName":"杠铃",
        "skuPrice":2000.0,
        "totalNum":1,
        "totalPrice":2000.0
    }
    {
        "skuCategory":"ELECTRONICS",
        "skuId":2020001,
        "skuName":"无人机",
        "skuPrice":999.0,
        "totalNum":1,
        "totalPrice":999.0
    }
    {
        "skuCategory":"CLOTHING",
        "skuId":2020006,
        "skuName":"大头皮鞋",
        "skuPrice":300.0,
        "totalNum":1,
        "totalPrice":300.0
    }
    {
        "skuCategory":"BOOKS",
        "skuId":2020005,
        "skuName":"剑指高效编程",
        "skuPrice":288.0,
        "totalNum":1,
        "totalPrice":288.0
    }
    {
        "skuCategory":"CLOTHING",
        "skuId":2020002,
        "skuName":"T-shirt",
        "skuPrice":50.0,
        "totalNum":2,
        "totalPrice":100.0
    }
    {
        "skuCategory":"BOOKS",
        "skuId":2020003,
        "skuName":"人生的枷锁",
        "skuPrice":30.0,
        "totalNum":1,
        "totalPrice":30.0
    }
    {
        "skuCategory":"BOOKS",
        "skuId":2020004,
        "skuName":"老人与海",
        "skuPrice":20.0,
        "totalNum":1,
        "totalPrice":20.0
    }
    
    Process finished with exit code 0

     

  • 相关阅读:
    jstl <c:url>标签
    4.12快速分类
    2.递归回溯求子集和数问题
    计算圆面积
    openal在vs2010中的配置
    结构体数组排序
    检测信号的有无
    matlab中mat文件简单存/取
    m文件转换c代码
    安装fftw到window(vs2010)及使用fftw库函数实现4096点fft变换计算
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/12742039.html
Copyright © 2020-2023  润新知