packagecom.imooc.zhangxiaoxi.stream.cases;importcom.google.common.collect.Lists;importlombok.AllArgsConstructor;importlombok.Data;importorg.junit.Before;importorg.junit.Test;importjava.util.List;/*** 类名称:CaseTwo
* ********************************
*
* 类描述:案例二
* 重点讲解:filter和distinct的使用方式
*
*@authorzhangxiaoxi
* @date 下午9:39*/
public classCaseTwo {/*** 用户请求的创建标签模型*/
/*@Data
@AllArgsConstructor*/
classTagReqDTO {/*** 标签名字*/
privateString name;/*** 标签值:年龄*/
privateInteger age;
@OverridepublicString toString() {return "TagReqDTO{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}publicTagReqDTO(String name, Integer age) {this.name =name;this.age =age;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}publicInteger getAge() {returnage;
}public voidsetAge(Integer age) {this.age =age;
}//重写equals要实现hachCode()
@Override
public int hashCode() {final int prime = 31;int result = 1;
result= prime * result + ((name == null) ? 0: name.hashCode());
result= prime * result +age;returnresult;
}//第三步
@Override
public boolean equals(Object obj) {if (this == obj) //判断对象地址是否相等,如果是就不用判断,提高效率
return true;if (obj == null) //对象为空,则不往下走了
return false;if (getClass() != obj.getClass()) //判断两个对象是否一样:
return false;
TagReqDTO tag= (TagReqDTO) obj; //向下转型
/**判断成员变量是否一样*/
if (age !=tag.age)return false; //判断年龄,int类型,直接比较//String类型,equals()比较
if (name == null) {if (tag.name != null)return false;
}else if (!name.equals(tag.name))return false;return true;
}
}/*** 从DB中查询出来的已经存在的标签名*/ListtagListFromDB;/*** 用户请求的标签列表*/ListtagListFromReq;
@Beforepublic voidinit() {//数据库中存在的标签名列表
tagListFromDB =Lists.newArrayList("李四", "王五", "赵六");//用户提交的
tagListFromReq =Lists.newArrayList(new TagReqDTO("张三", 10),new TagReqDTO("李四", 30),new TagReqDTO("张三", 11));
}
@Testpublic voiddistinctTag() {
TagReqDTO a= new TagReqDTO("1",1);
TagReqDTO b= new TagReqDTO("1",11);
System.out.println("a===b为"+a.equals(b));
tagListFromReq.stream()
.filter(tag->!tagListFromDB.contains(tag.getName()))
.distinct()
.forEach(tag->System.out.println("添加标签为"+tag));
}
}