学习任务:

视频学习

动手测试distinct()

distinct()去重方法,对流的元素进行去重操作,使用equals()、hashCode()方法判断元素是否相等,重复的元素则放弃,它是一个有状态方法。

API方法如下:

Stream<T> distinct();

测试代码如下:

首先定义元素类型的equals()、hashCode()方法:

测试代码使用PbCourse类,在PbCourse类中定义equals()、hashCode()方法,课程的id和课程名称决定它的唯一性,定义如下:

	@Override
	public boolean equals(Object o) {
		if (this == o) return true;
		if (o == null || getClass() != o.getClass()) return false;
		PbCourse pbCourse = (PbCourse) o;
		return id == pbCourse.id &&
				Objects.equals(courseName, pbCourse.courseName);
	}
	
	@Override
    public int hashCode() {
        return Objects.hash(id, courseName);
    }

测试代码如下:

	//distinct()测试,对流中的元素去重
	public static void test_distinct() {
		//创建collection集合
		List<PbCourse> list = new ArrayList<>() ;
        list.add(new PbCourse(100L, "攀博课堂-Java面向对象教程", 33));
        list.add(new PbCourse(101L, "攀博课堂-Spring全家桶教程", 44));
        list.add(new PbCourse(101L, "攀博课堂-Spring全家桶教程", 44));
        list.add(new PbCourse(102L, "攀博课堂-SpringCloud微服务教程", 55));
        list.add(new PbCourse(103L, "攀博课堂-在线教育分布式项目教程", 66));
        list.add(new PbCourse(104L, "攀博课堂-电子商务项目教程", 66));
        list.add(new PbCourse(104L, "攀博课堂-电子商务项目教程", 66));
        //对流中的元素去重
        Stream<PbCourse> stream = list.stream().distinct();
        //遍历新流
        stream.forEach(System.out::println);
	}

输出:

PbCourse [id=100, courseName=攀博课堂-Java面向对象教程, price=33]
PbCourse [id=101, courseName=攀博课堂-Spring全家桶教程, price=44]
PbCourse [id=102, courseName=攀博课堂-SpringCloud微服务教程, price=55]
PbCourse [id=103, courseName=攀博课堂-在线教育分布式项目教程, price=66]
PbCourse [id=104, courseName=攀博课堂-电子商务项目教程, price=66]

从输出结果上可以看出 “PbCourse [id=104, courseName=攀博课堂-电子商务项目教程, price=66] “该课程去重成功。

如果不自定义equals()方法则默认比较两个对象的内存地址,此时执行上边的代码将无法对

“PbCourse [id=104, courseName=攀博课堂-电子商务项目教程, price=66]” 课程去重。

提问-攀博课堂
我要提问 不会就问,有效沟通
关注公众号,加入微信群交流提问。 攀博课堂官方公众号
问答列表,查看本知识点所有问题