高效 告别996,开启java高效编程之门 3-2传统方式处理业务逻辑

1    重点

1.1    对sort方法使用的理解

2    代码演练

需求:

根据第一章需求,女盆友提出需求
* 1 打印所有商品
* 2 图书类的商品一定给买
* 3 最贵的买两件
* 4 打印最贵的两件商品的名称和总价


测试类:

package com.imooc.zhangxiaoxi.stream;

import com.alibaba.fastjson.JSON;
import com.imooc.zhangxiaoxi.lambda.cart.CartService;
import com.imooc.zhangxiaoxi.lambda.cart.Sku;
import com.imooc.zhangxiaoxi.lambda.cart.SkuCategoryEnum;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/**
 * StreamVs
 *
 * @author 魏豆豆
 * @date 2020/4/7
 */
public class StreamVs {

    /**
     * 流和普通方法对比,本节应用普通方法
     *
     * 根据第一章需求,女盆友提出需求
     * 1    打印所有商品
     * 2    图书类的商品一定给买
     * 3    最贵的买两件
     * 4    打印最贵的两件商品的名称和总价
     */

    /**
     * 普通方法
     */
    @Test
    public void oldCartHandle(){
        //1 打印所有商品
        List<Sku> skuList = CartService.getSkuList();
        System.out.println("====================================================================================================");
        for(Sku sku: skuList){
            System.out.println(JSON.toJSONString(sku,true));
        }

        //2 排除图书类
        List<Sku> skuListNoBooks = new ArrayList<Sku>();
        for(Sku sku:skuList){
            if(!sku.getSkuCategory().equals(SkuCategoryEnum.BOOKS)){
                skuListNoBooks.add(sku);
            }
        }

        //3 最贵的买两件
        skuListNoBooks.sort(new Comparator<Sku>() {
            @Override
            public int compare(Sku o1, Sku o2) {
                if(o1.getTotalPrice()> o2.getTotalPrice()){
                    return -1;
                }else if(o1.getTotalPrice() < o2.getTotalPrice()){
                    return 1;
                }else{
                    return 0;
                }
            }
        });

        List<Sku> skuListPreTwo = new ArrayList<Sku>();
        for(int i = 0;i<2;i++){
            skuListPreTwo.add(skuListNoBooks.get(i));
        }

        System.out.println("====================================================================================================");
        Double totalPrice = 0.0;
        for(Sku sku:skuListPreTwo){
            totalPrice+=sku.getTotalPrice();
        }

        List<String> skuNameList = new ArrayList<String>();
        for (Sku sku:skuListPreTwo){
            skuNameList.add(sku.getSkuName());
        }

        System.out.println("商品总价为:"+totalPrice);
        System.out.println("商品名称为:"+ JSON.toJSONString(skuNameList,true));
    }

}

其他类参考2-3:

打印日志:

D:\java\jdk\jdk9\jdk-9+181_windows-x64_ri\java-se-9-ri\jdk-9\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar=35416:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\bin" -Dfile.encoding=UTF-8 -classpath "D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar;D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\plugins\junit\lib\junit-rt.jar;D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\plugins\junit\lib\junit5-rt.jar;F:\xiangmu3\Xin\test996\target\test-classes;F:\xiangmu3\Xin\test996\target\classes;F:\xiangmu3\Xin\test996\lib\com\google\guava\guava\28.2-jre\guava-28.2-jre.jar;F:\xiangmu3\Xin\test996\lib\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;F:\xiangmu3\Xin\test996\lib\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;F:\xiangmu3\Xin\test996\lib\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;F:\xiangmu3\Xin\test996\lib\org\checkerframework\checker-qual\2.10.0\checker-qual-2.10.0.jar;F:\xiangmu3\Xin\test996\lib\com\google\errorprone\error_prone_annotations\2.3.4\error_prone_annotations-2.3.4.jar;F:\xiangmu3\Xin\test996\lib\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3.jar;F:\xiangmu3\Xin\test996\lib\junit\junit\4.12\junit-4.12.jar;F:\xiangmu3\Xin\test996\lib\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;F:\xiangmu3\Xin\test996\lib\com\alibaba\fastjson\1.2.58\fastjson-1.2.58.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit3 com.imooc.zhangxiaoxi.stream.StreamVs,oldCartHandle
====================================================================================================
{
    "skuCategory":"ELECTRONICS",
    "skuId":2020001,
    "skuName":"无人机",
    "skuPrice":999.0,
    "totalNum":1,
    "totalPrice":999.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
}
{
    "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
}
{
    "skuCategory":"ELECTRONICS",
    "skuId":2020008,
    "skuName":"ThinkPad",
    "skuPrice":5000.0,
    "totalNum":1,
    "totalPrice":5000.0
}
====================================================================================================
商品总价为:7000.0
商品名称为:[
    "ThinkPad",
    "杠铃"
]

Process finished with exit code 0

 

原文地址:https://www.cnblogs.com/1446358788-qq/p/12651174.html

时间: 2024-11-07 14:31:22

高效 告别996,开启java高效编程之门 3-2传统方式处理业务逻辑的相关文章

高效 告别996,开启java高效编程之门 3-7实战:常用中间操作演示之:过滤/映射/扁平化 filter/map/flagMap

1 重点 filter方法的使用 map方法的使用 flatMap方法的使用 forEach方法的使用 2 map和flatMap的区别: map的作用很容易理解就是对rdd之中的元素进行逐一进行函数操作映射为另外一个rdd. flatMap的操作是将函数应用于rdd之中的每一个元素,将返回的迭代器的所有内容构成新的rdd.通常用来切分单词,可用来单词计数 3 实战演示之过滤(filter): package com.imooc.zhangxiaoxi.stream; import com.al

高效 告别996,开启java高效编程之门 2-8实战:判断逻辑参数化-Lambda表达式

0 有用部分 1    函数式编程简介 2    函数式编程和lambda的关系 3    lambda表达式应用范围 4    lambda应用的五个案例 5    函数式编程应用条件 6 提出问题 0 有用部分 4 lambda应用的五个案例 5 函数式编程应用条件 6 提出问题 本节主要介绍了lambda的使用方式,具体demo参照2-10 和2-15 1 函数式编程简介 函数式编程是一种不同的编程思想,定义函数作为公民,可以赋值给变量,作为参数或者返回值来传递 2 函数式编程和lambd

高效 告别996,开启java高效编程之门 2-10实战:自定义函数式接口

1 有用部分 2    代码演练 1 有用部分 个人理解: 1.1 关于lambda的应用 通过 @FunctionalInterface注解 将其参数 fileContent  注入,调用的时候可以直接调取到. 服务层通过直接调用接口的方法,没有用实现类 1.2 关于文件流的读取操作 demo中设计更多的流的读取的操作 2 代码演练 需求: 将本地文件打印出来 接口: package com.imooc.zhangxiaoxi.lambda.file; /** * 接口中只有一个抽象方法,可以

高效 告别996,开启java高效编程之门 2-15方法引用精讲

2-14课程和2-12重复了,所以没有发出来 1 方法引用使用条件 判断方法引用 是否满足场景的要求的时候,只需要看我们的出参和入参是否满足接口的要求即可 2 方法引用场景 四种方法引用类型: 指向静态方法 Class::staticMethod指向现有对象的实例方法 object::instanceMethod指向任意类型的实例方法 C1ass::instanceMethod指向构造方法 Class::new 3 方法引用demo package com.imooc.zhangxiaoxi.l

高效 告别996,开启java高效编程之门 3-6流操作分类

1 重点 理解流程操作分类 常用的方法 2 Stream流操作分类: 2.1 流操作分类之中间操作(Intermediate): 无状态操作——filter/map/peek等有状态操作——dictinct/sorted/limit等 2.2 流操作分类之终端操作(Termina1):非短路操作——forEach/collect/count等短路操作——anyMatch/findFirst/findAny等 2.3 有状态操作无状态操作区别: 无状态操作: 比如map或者filter会从输入流中

高效 告别996,开启java高效编程之门 3-5 Stream流概念解析

3-4讲的没有意义,直接过了 1 重点 概念解析中的定义 Stream流的组成 Stream流和集合的区别 2 概念解析 定义: 从支持数据处理操作的源生成的元素序列. 解释: 元素序列:和集合一样,流也是一个接口,可以访问特定元素类型的一组有序值,有序值就是元素序列 源:为流提供数据的源头,比如集合,数组,都可以称之为源. 数据处理操作:流的数据处理操作支持类似与数据库的操作(map,sort,limit)以及函数式编程语言中的一些常用操作. 功能: ◆JDK1.8引入的新成员,以声明式方式处

Java并发编程(01):线程的创建方式,状态周期管理

本文源码:GitHub·点这里 || GitEE·点这里 一.并发编程简介 1.基础概念 程序 与计算机系统操作有关的计算机程序.规程.规则,以及可能有的文件.文档及数据. 进程 进程是计算机中的程序,关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在面向线程设计的计算机结构中,进程是线程的容器.程序是指令.数据及其组织形式的描述,进程是程序的实体. 线程 线程是操作系统能够进行运算调度的最小单

Java并发编程-创建线程的两种方式及区别

转载请注明:http://blog.csdn.net/UniKylin/article/details/45016117 1.线程和进程的区别 并行:是多个任务在同一时间同时执行,例如多核计算机同时计算的任务可以理解为并行 并发:从微观上看是多个任务抢占一个CPU从而执行自己的任务,轮流执行任务,但是如果遇到资源冲突的时候并没有从根本提高执行效率.但是提高了CPU的使用效率. 前段时间在GitHub上的一幅图可以很好的阐述上面的概念非常形象 2.Java中创建线程的两种方式 1.第一种方式:直接

java如何异步方式处理业务逻辑

1.基础类-java.util.concurrent.ExcutorService 这个类的几个重要函数 shutdown 关闭任务池,无法传入新任务 shutdownnow 关闭所有任务,包括未执行完成的任务 submit 向任务池提交任务 2.基础接口-java.util.concurrent.Future Future就是对于具体的Runnable或者Callable任务的执行结果进行取消.查询是否完成.获取结果.必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果. Fut