感谢慕课老师的教导,学习链接如下所示: https://coding.imooc.com/learn/list/382.html
开始遇到的问题1,将.java 文件放到了Java目录下,没有放到包内,导致问题出错
2,java1.5 不支持 lam表达式,更改Pom文件后,可以成功。
1,新建项目,该类的方式采用的是静态方式
package com.imooc.lambda.cart;
import java.util.ArrayList;
import java.util.List;
/**
* 购物车服务类
*/
public class CartService {
// 加入到购物车中的商品信息
private static List<Sku> cartSkuList =
new ArrayList<Sku>(){
{
add(new Sku(654032, "无人机",
4999.00, 1,
4999.00, SkuCategoryEnum.ELECTRONICS));
add(new Sku(642934, "VR一体机",
2299.00, 1,
2299.00, SkuCategoryEnum.ELECTRONICS));
add(new Sku(645321, "纯色衬衫",
409.00, 3,
1227.00, SkuCategoryEnum.CLOTHING));
add(new Sku(654327, "牛仔裤",
528.00, 1,
528.00, SkuCategoryEnum.CLOTHING));
add(new Sku(675489, "跑步机",
2699.00, 1,
2699.00, SkuCategoryEnum.SPORTS));
add(new Sku(644564, "Java编程思想",
79.80, 1,
79.80, SkuCategoryEnum.BOOKS));
add(new Sku(678678, "Java核心技术",
149.00, 1,
149.00, SkuCategoryEnum.BOOKS));
add(new Sku(697894, "算法",
78.20, 1,
78.20, SkuCategoryEnum.BOOKS));
add(new Sku(696968, "TensorFlow进阶指南",
85.10, 1,
85.10, SkuCategoryEnum.BOOKS));
}
};
/**
* 获取商品信息列表
* @return
*/
public static List<Sku> getCartSkuList() {
return cartSkuList;
}
/**
* Version 1.0.0
* 找出购物车中所有电子产品
* @param cartSkuList
* @return
*/
public static List<Sku> filterElectronicsSkus(
List<Sku> cartSkuList) {
List<Sku> result = new ArrayList<Sku>();
for (Sku sku: cartSkuList) {
// 如果商品类型 等于 电子类
if (SkuCategoryEnum.ELECTRONICS.
equals(sku.getSkuCategory())) {
result.add(sku);
}
}
return result;
}
/**
* Version 2.0.0
* 根据传入商品类型参数,找出购物车中同种商品类型的商品列表
* @param cartSkuList
* @param category
* @return
*/
public static List<Sku> filterSkusByCategory(
List<Sku> cartSkuList, SkuCategoryEnum category) {
List<Sku> result = new ArrayList<Sku>();
for (Sku sku: cartSkuList) {
// 如果商品类型 等于 传入商品类型参数
if (category.equals(sku.getSkuCategory())) {
result.add(sku);
}
}
return result;
}
/**
* Version 3.0.0
* 支持通过商品类型或总价来过滤商品
* @param cartSkuList
* @param category
* @param totalPrice
* @param categoryOrPrice - true: 根据商品类型,false: 根据商品总价
* @return
*/
public static List<Sku> filterSkus(
List<Sku> cartSkuList, SkuCategoryEnum category,
Double totalPrice, Boolean categoryOrPrice) {
List<Sku> result = new ArrayList<Sku>();
for (Sku sku: cartSkuList) {
// 如果根据商品类型判断,sku类型与输入类型比较
// 如果根据商品总价判断,sku总价与输入总价比较
if (
(categoryOrPrice
&& category.equals(sku.getSkuCategory())
||
(!categoryOrPrice
&& sku.getTotalPrice() > totalPrice))) {
result.add(sku);
}
}
return result;
}
/**
* Version 4.0.0
* 根据不同的Sku判断标准,对Sku列表进行过滤
* @param cartSkuList
* @param predicate - 不同的Sku判断标准策略
* @return
*/
public static List<Sku> filterSkus(
List<Sku> cartSkuList, SkuPredicate predicate) {
List<Sku> result = new ArrayList<Sku>();
for (Sku sku: cartSkuList) {
// 根据不同的Sku判断标准策略,对Sku进行判断
if (predicate.test(sku)) {
result.add(sku);
}
}
return result;
}
}
2,其他辅助的类分别如下所示
package com.imooc.lambda.cart;
/**
* 下单商品信息对象
*/
public class Sku {
// 编号
private Integer skuId;
// 商品名称
private String skuName;
// 单价
private Double skuPrice;
// 购买个数
private Integer totalNum;
// 总价
private Double totalPrice;
// 商品类型
private Enum skuCategory;
/**
* 构造函数
* @param skuId
* @param skuName
* @param skuPrice
* @param totalNum
* @param totalPrice
* @param skuCategory
*/
public Sku(Integer skuId, String skuName,
Double skuPrice, Integer totalNum,
Double totalPrice, Enum skuCategory) {
this.skuId = skuId;
this.skuName = skuName;
this.skuPrice = skuPrice;
this.totalNum = totalNum;
this.totalPrice = totalPrice;
this.skuCategory = skuCategory;
}
/**
* Get方法
* @return
*/
public Integer getSkuId() {
return skuId;
}
public String getSkuName() {
return skuName;
}
public Double getSkuPrice() {
return skuPrice;
}
public Integer getTotalNum() {
return totalNum;
}
public Double getTotalPrice() {
return totalPrice;
}
public Enum getSkuCategory() {
return skuCategory;
}
}
package com.imooc.lambda.cart;
/**
* 商品类型枚举
*/
public enum SkuCategoryEnum {
CLOTHING(10, "服装类"),
ELECTRONICS(20, "数码类"),
SPORTS(30, "运动类"),
BOOKS(40, "图书类");
// 商品类型的编号
private Integer code;
// 商品类型的名称
private String name;
/**
* 构造函数
* @param code
* @param name
*/
SkuCategoryEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
}
3,接口的使用
package com.imooc.lambda.cart;
/**
* Sku选择谓词接口
*/
public interface SkuPredicate {
/**
* 选择判断标准
* @param sku
* @return
*/
boolean test(Sku sku);
}
package com.imooc.lambda.cart;
/**
* 对Sku的商品类型为图书类的判断标准
*/
public class SkuBooksCategoryPredicate implements SkuPredicate {
@Override
public boolean test(Sku sku) {
return SkuCategoryEnum.BOOKS.equals(sku.getSkuCategory());
}
}
package com.imooc.lambda.cart;
/**
* 对Sku的总价是否超出2000作为判断标准
*/
public class SkuTotalPricePredicate implements SkuPredicate {
@Override
public boolean test(Sku sku) {
return sku.getTotalPrice() > 2000;
}
}
4,测试Test类
package lambda.cart;
import com.alibaba.fastjson.JSON;
import com.imooc.lambda.cart.CartService;
import com.imooc.lambda.cart.Sku;
import org.junit.Test;
import java.util.List;
public class Version1Test {
@Test
public void filterElectronicsSkus() {
List<Sku> cartSkuList = CartService.getCartSkuList();
// 查找购物车中数码类商品
List<Sku> result =
CartService.filterElectronicsSkus(cartSkuList);
System.out.println(
JSON.toJSONString(result, true));
}
@Test
public void filterSkusByCategory() {
List<Sku> cartSkuList = CartService.getCartSkuList();
// 查找购物车中图书类商品集合
List<Sku> result = CartService.filterSkusByCategory(
cartSkuList, SkuCategoryEnum.BOOKS);
System.out.println(JSON.toJSONString(
result, true));
}
@Test
public void filterSkus() {
List<Sku> cartSkuList = CartService.getCartSkuList();
// 根据商品总价过滤超过2000元的商品列表
List<Sku> result = CartService.filterSkus(
cartSkuList, null,
2000.00, false);
System.out.println(JSON.toJSONString(
result, true));
}
@Test
public void filterSkus() {
List<Sku> cartSkuList = CartService.getCartSkuList();
// 过滤商品总价大于2000的商品
List<Sku> result = CartService.filterSkus(
cartSkuList, new SkuTotalPricePredicate());
System.out.println(JSON.toJSONString(
result, true));
}
@Test
public void filterSkus() {
List<Sku> cartSkuList = CartService.getCartSkuList();
// 过滤商品单价大于1000的商品
List<Sku> result = CartService.filterSkus(
cartSkuList, new SkuPredicate() {
@Override
public boolean test(Sku sku) {
return sku.getSkuPrice() > 1000;
}
});
System.out.println(JSON.toJSONString(
result, true));
}
@Test
public void filterSkus() {
List<Sku> cartSkuList = CartService.getCartSkuList();
// 过滤商品单价大于1000的商品
List<Sku> result = CartService.filterSkus(
cartSkuList,
(Sku sku) -> sku.getSkuPrice() > 1000);
System.out.println(JSON.toJSONString(
result, true));
}
}
5 pom类
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jiaokeyuan</groupId>
<artifactId>imooc996</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
<!-- Validation 相关依赖 -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.16.Final</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
<version>2.2.6</version>
</dependency>
<!-- Lombok 章节引入Jar包 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
<!-- Guava 章节引入 -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.0-jre</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>