欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于两个List集合对象去重

程序员文章站 2022-05-22 15:48:50
...

 实际项目开发中,很多业务场景下都会遇见集合去重。在说到两个对象去重之前,首先我们回顾下普通类型的list如何去重,这里先说两个list自带的方法,图画的不是太好,勿喷- -!

一:retainAll()

关于两个List集合对象去重

			List<String> A = new ArrayList<String>();
			A.add("A");
			A.add("B");
			A.add("C");
			A.add("D");
			
			List<String>B = new ArrayList<String>();
			B.add("C");
			B.add("D");
			B.add("E");
			B.add("F");
			List<String> C = new ArrayList<String>();
			C.addAll(A);
			C.retainAll(B);
			System.out.println(C); 
结果: [C, D]

二:removeAll()

关于两个List集合对象去重

			List<String> A = new ArrayList<String>();
			A.add("A");
			A.add("B");
			A.add("C");
			A.add("D");
			
			List<String>B = new ArrayList<String>();
			B.add("C");
			B.add("D");
			B.add("E");
			B.add("F");
			
			List<String> C = new ArrayList<String>();
			C.addAll(A);
			C.removeAll(B);
			System.out.println(C);
结果:[A, B]

上面的方法看完相信已经知道一大半了,其实要做到对象去重很简单,就是还要在你的entity里重写equals和hashCode方法

不知道为什么的同学可以参照这篇文章,讲的还不错:点击打开链接 有时候,根据业务不同,可以把需要去重的条件加进去即可。举一个好吃的栗子,代码如下

entity:

public class User {
	
	private String name;
	private Integer age;
	private String type;
// Setters and Getters 省略get&set方法.
//方便测试,写出有参构造,默认时无参.
	public User(String name,String type,int age){
		this.name = name;
		this.type  = type;
	}
	//eclipse快捷键shift+alt+s自动生成(默认实体类的所有属性)。  下边的重写方法只是根据姓名和类型来判断去重,业务不同写法不同
	@Override
	public int hashCode() {
		String result = name+type;
		return result.hashCode();
	}
	@Override
	public boolean equals(Object obj) {
		User u = (User)obj;
		return this.getName().equals(u.getName()) && (this.getType().equals(u.getType()));
	}
}
test:
public class UserDistinctTest {
	public static void main(String[] args) {
		List<User> A = new ArrayList<User>();
		User user1 = new User("LiMing", "1");
		A.add(user1);

		User user2 = new User("WangHong", "2");
		A.add(user2);

		User user3 = new User("ZhangLiang", "3");
		A.add(user3);

		List<User> B = new ArrayList<User>();
		User user4 = new User("LiMing", "1");
		B.add(user4);

		User user5 = new User("WangHong", "2");
		B.add(user5);

		List<User> distinctList = new ArrayList<User>();
		distinctList.addAll(A);
		distinctList.retainAll(B);
             //distinctList.retainAll(B); 结果: 姓名:ZhangLiang---类型:3
for (User obj : distinctList) {System.out.println("姓名:" + obj.getName() + "---" + "类型:"+ obj.getType());}}}结果:姓名:LiMing---类型:1 姓名:WangHong---类型:2
相关标签: x