对象类型的元素集合去重(并集、交集、差集)

1、实体类实现equals()和hashCode()方法

package com.zch.book.entity;

import java.sql.Date;

public class Book {
	private int bookNo;//图书编号
	private String bookName;//图书名字
	private String bookAuthor;//图书作者
	private Date bookDate;//出版日期
	private String bookDescription;//图书描述
	public int getBookNo() {
		return bookNo;
	}
	public void setBookNo(int bookNo) {
		this.bookNo = bookNo;
	}
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	public String getBookAuthor() {
		return bookAuthor;
	}
	public void setBookAuthor(String bookAuthor) {
		this.bookAuthor = bookAuthor;
	}
	public Date getBookDate() {
		return bookDate;
	}
	public void setBookDate(Date bookDate) {
		this.bookDate = bookDate;
	}
	public String getBookDescription() {
		return bookDescription;
	}
	public void setBookDescription(String bookDescription) {
		this.bookDescription = bookDescription;
	}
	public Book(int bookNo, String bookName, String bookAuthor, Date bookDate, String bookDescription) {
		super();
		this.bookNo = bookNo;
		this.bookName = bookName;
		this.bookAuthor = bookAuthor;
		this.bookDate = bookDate;
		this.bookDescription = bookDescription;
	}
	public Book() {
		super();
	}
	@Override
	public String toString() {
		return "Book [bookNo=" + bookNo + ", bookName=" + bookName + ", bookAuthor=" + bookAuthor + ", bookDate="
				+ bookDate + ", bookDescription=" + bookDescription + "]";
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((bookAuthor == null) ? 0 : bookAuthor.hashCode());
		result = prime * result + ((bookDate == null) ? 0 : bookDate.hashCode());
		result = prime * result + ((bookDescription == null) ? 0 : bookDescription.hashCode());
		result = prime * result + ((bookName == null) ? 0 : bookName.hashCode());
		result = prime * result + bookNo;
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Book other = (Book) obj;
		if (bookAuthor == null) {
			if (other.bookAuthor != null)
				return false;
		} else if (!bookAuthor.equals(other.bookAuthor))
			return false;
		if (bookDate == null) {
			if (other.bookDate != null)
				return false;
		} else if (!bookDate.equals(other.bookDate))
			return false;
		if (bookDescription == null) {
			if (other.bookDescription != null)
				return false;
		} else if (!bookDescription.equals(other.bookDescription))
			return false;
		if (bookName == null) {
			if (other.bookName != null)
				return false;
		} else if (!bookName.equals(other.bookName))
			return false;
		if (bookNo != other.bookNo)
			return false;
		return true;
	}
	
	

}

2、测试方法

//利用list和set集合实现去重
	@Test
	public void test() {
		//模拟从数据库中取出来的数据并存入list集合
		Book book = new Book(1869,"aaa", "张灵", DateFormat.to_Date2("2018-9-6"), "王者峡谷一游");
		ArrayList<Book> list = new ArrayList<Book>();
		list.add(book);
		
		//创建一个set集合来存放从数据库中取出来的数据
		HashSet<Book> orgSet = new HashSet<Book>();
		orgSet.addAll(list);
		
		//模拟从前台传入的两条数据,并将这两条数据也加入同一个list集合中
		Book book3 = new Book(1869,"aaa", "张灵", DateFormat.to_Date2("2018-9-6"), "王者峡谷一游");
		Book book2 = new Book(1869,"bbb", "张三", DateFormat.to_Date2("2018-9-6"), "");
		list.add(book2);
		list.add(book3);
		
		//创建另一个set集合来存放前台传入的数据和数据库中取出来的数据
		HashSet<Book> set = new HashSet<Book>();;
		set.addAll(list);
		
		/**
		 * 分析:利用set集合的去重特性,对于相同内容的对象,在set集合中只存储其中一个,
		 * 因此,前一个set集合是后一个set集合的子集,
		 * 这时候,我们需要对这两个集合做差集操作,取出不同的数据即可。
		 */
		//新创建一个set集合,用于存放用存放并集、交集和差集
		HashSet<Book> resultSet = new HashSet<Book>();
		//1、并集操作
		resultSet.addAll(orgSet);
		resultSet.addAll(set);
		System.err.println("并集操作:"+resultSet);
		
		//2、交集操作
		resultSet.clear();//清空集合
		resultSet.addAll(orgSet);
		resultSet.retainAll(set);
		System.err.println("交集操作:"+resultSet);
		
		//3、差集操作,与顺序有关
		resultSet.clear();
		resultSet.addAll(set);
		resultSet.removeAll(orgSet);
		System.err.println("差集操作:"+resultSet);
	}

3、测试结果:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java 8 中可以使用 Stream API 来实现集合之间的交集并集差集去重并集。 假设有两个 List 集合list1 和 list2,分别包含一些元素,代码如下: ```java List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5); List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8); ``` 下面分别介绍如何实现集合之间的操作。 1. 交集 交集即获两个集合中共同拥有的元素。可以使用 Stream API 的 `filter()` 方法和 `contains()` 方法实现。代码如下: ```java List<Integer> intersection = list1.stream() .filter(list2::contains) .collect(Collectors.toList()); System.out.println("交集:" + intersection); // 输出 [4, 5] ``` 2. 并集 并集即获两个集合中所有的元素,但是去重。可以使用 Stream API 的 `distinct()` 方法和 `concat()` 方法实现。代码如下: ```java List<Integer> union = Stream.concat(list1.stream(), list2.stream()) .distinct() .collect(Collectors.toList()); System.out.println("并集:" + union); // 输出 [1, 2, 3, 4, 5, 6, 7, 8] ``` 3. 差集 差集即获两个集合中不同的元素。可以使用 Stream API 的 `filter()` 方法和 `!contains()` 方法实现。代码如下: ```java List<Integer> diff1 = list1.stream() .filter(e -> !list2.contains(e)) .collect(Collectors.toList()); System.out.println("差集1:" + diff1); // 输出 [1, 2, 3] List<Integer> diff2 = list2.stream() .filter(e -> !list1.contains(e)) .collect(Collectors.toList()); System.out.println("差集2:" + diff2); // 输出 [6, 7, 8] ``` 4. 去重并集 去重并集即获两个集合中所有的元素,并且去重。可以使用 Stream API 的 `distinct()` 方法和 `flatMap()` 方法实现。代码如下: ```java List<Integer> distinctUnion = Stream.of(list1, list2) .flatMap(List::stream) .distinct() .collect(Collectors.toList()); System.out.println("去重并集:" + distinctUnion); // 输出 [1, 2, 3, 4, 5, 6, 7, 8] ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值