商品打折的最终解决 | 学习笔记

简介: 快速学习商品打折的最终解决

开发者学堂课程【Scala 核心编程 - 进阶商品打折的最终解决学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9084


商品打折的最终解决


内容介绍:

一、匹配嵌套结构

二、总结


一、匹配嵌套结构

此案例的需求:

现有许多商品,请使用 scala 设计相关样例类,完成商品的捆绑打折销售。

要求一:可以对多个商品或者一个商品进行打折。

要求二:打折时按照扣x元来进行打折

要求三:能够统计出所有捆绑商品打折后的最终价格

def price(it: item): double ={

it match {

case book(_,p)=> p

//生成一个新的集合,_是将its中每个循环的元素传递到price的it中,递归操作,分析一个简单的流程

case bundle (_,disc,its@_*)=>its.map(price _).sum-disc

}

}

创建一个 price,用来接收 item,返回 double。

It 匹配:

如果是一本书,直接返回。如果是一个 double,着重点在于打折的钱数。

Its 后面紧跟一个bundle集合全部取出交给its,于是又使用了its.map去调用price,进行递归计算,最后求和减去打折,打折一层一层进行。

代码分析:

def price(it: item): double ={

it match {

case book(_,p)=> p

//生成一个新的集合,_是将its中每个循环的元素传递到price的it中,递归操作,分析一个简单的流程

case bundle (_,disc,its@_*)=>its.map(price _).sum-disc

 }

}

1.its.map(price).sum -10【its集合book(“漫画”,40))】

2.case book(_,p)=>p=>40

3.40-10 = 30

里面的 map 会再次执行 price,its 是一个集合,里面只有一个book,相当于给price 传递的只有一个 book,case Book(_,p)=>p

会把 p 提取出来,因为用的是样例类。即对象的提取,整个会返回40,返回调用的位置。

将“val sale = Bundle(”书籍”,10,Book(“漫画,40”))看做一个整体。

案例的完成:

Price 接受一个 its,最后的 item 会整个返回 double 类型做一个 match 的匹配。首先检查是否为一个 book,如果是,看中的是它的价格。

如果不是 book,而是一个 bundle,看重的是打折和后面的部分,将其全部取出。Its map 运用递归,一步步进行调用。整个完成后进行求和,最后减掉打折金额即disc。代码如下:

println("price="+ price(sale)) // 120

def price(it:Item): Double =

it match

case Book(_p)=> p

case Bundle(_,disc,its@ *)=> its.map(price).sum - disc

此模式比较综合,结合了 map,递归等语法。

用price传入sale,整个的结果会等于120,打印出来之后,执行结果如下:

D:\program\jdk8\bin\java·..

res=漫画

res2=(Book(漫画,40.0),WrappedArray(Bundle(文学作品,20.0,WrappedArray(Book(《阳关》,80.0),Book(《围城》,30.0)))))

res3=(Book(漫画,40.0),Bundle(文学作品,20.0,WrappedArray(Book(《阳关》,80.0),Book(《围城》,30.0))))

price=120.0

Process finished with exit code 0


二、总结

现在有一些商品,请使用 Scala 设计相关的样例类,完成商品可以捆绑打折出售。

要求

1)商品捆绑可以是单个商品,也可以是多个商品

2)打折时按照折扣 xx 元进行设计.

3)能够统计出所有捆绑商品打折后的最终价格

对应的代码和分析

def price(it:Item):Double=(

it match

case Book(_,p)=>p

case Bundle(_,disc,its @ ) => its.map(price).sum - disc

}

}

相关文章
|
13天前
|
存储 数据采集 搜索推荐
商品比价系统实现
商品比价系统实现
|
14天前
|
消息中间件 供应链 NoSQL
电商订单待支付(思路分析)
电商订单待支付(思路分析)
|
4月前
leetcode-1475:商品折扣后的最终价格
leetcode-1475:商品折扣后的最终价格
28 0
|
7月前
【Leetcode -1475.商品折扣后的最终价格 -1544.整理字符串】
【Leetcode -1475.商品折扣后的最终价格 -1544.整理字符串】
30 0
|
9月前
|
SQL 前端开发 测试技术
增加购物车商品数量【项目 商城】
增加购物车商品数量【项目 商城】
63 0
|
10月前
|
XML JSON 缓存
Java实现商品ID获取京东商品历史价格数据方法
Java实现商品ID获取京东商品历史价格数据方法
108 0
|
10月前
|
XML JSON 缓存
Java实现商品ID获取淘宝商品快递费用数据方法
Java实现商品ID获取淘宝商品快递费用数据方法
161 0
|
10月前
|
XML JSON 缓存
Java实现商品ID获取淘宝商品历史价格信息数据方法
Java实现商品ID获取淘宝商品历史价格信息数据方法
117 0
|
10月前
|
XML JSON 缓存
Java实现订单ID获取淘宝买到的订单列表数据接口方法
Java实现订单ID获取淘宝买到的订单列表数据接口方法
159 0
|
10月前
|
XML JSON 缓存
Java实现订单ID获取淘宝买到的订单物流数据接口方法
Java实现订单ID获取淘宝买到的订单物流数据接口方法
96 0