List去重及使用jdk8語法操作list去重

1. 集合List去重

List是有序的,可以重複的。Set是無序的,不可以重複的。List去重,如果T是基本類型的,只需要將List轉成Set就可以去重;如果T是對象類型,那麼需要重新equals()和hashCode()方法。

1.1 基本類型

假如有一個List集合[Simon, kevin, lucy, kevin, lily],去掉其中重複的元素kevin

List<String> list = new ArrayList<>();
list.add("Simon");
list.add("kevin");
list.add("lucy");
list.add("kevin");
list.add("lily");

1.1.1 List< String>轉Set< String>去重

通過List轉Set去重,然後存到一個新的List集合list3裏面

Set<String> set = new HashSet<>(list);
List<String> list3 = new ArrayList<>(set);
System.out.println("list3="+list3);

這樣去重後的問題:新的集合lis3t和原來的list集合裏面元素的順序不一致

要讓去重後的List集合和原來的List集合一致,可以如下操作:
先foreache list集合,然後去set.add()判斷,如果add()方法返回爲true便給新的list集合去添加這個元素。
具體的實現代碼如下:

Set<String> set2 = new HashSet<>();
List<String> list4 = new ArrayList<>();
for(String str : list) {
	if(set2.add(str)) {
		list4.add(str);
	}
}
System.out.println("list4="+list4);

1.1.2 jdk8的新語法操作List< String>去重

List<String> list2 = list.stream().distinct().collect(Collectors.toList());
System.out.println("list2="+list2);

這樣操作後新的list集合list2的順序和list裏面的順序一致

1.2 對象類型

對象類型,需要重新equals()和hashCode()方法,才能夠判斷出來兩個對象是同一個對象,然後給去重。

public class User {
	
	private String name;
	
	private int age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "User [name=" + name + ", age=" + age + "]";
	}

	public User(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	@Override
	public int hashCode() {
		String str = name + age;
		return str.hashCode();
	}

	@Override
	public boolean equals(Object obj) {
		User user = (User)obj;
		return name.equals(user.name) && age==user.age;
	}

}

需要去重的List集合List< User >:

List<User> list = new ArrayList<User>() {{
	add(new User("Simon", 24));
	add(new User("kevin", 28));
	add(new User("lucy", 23));
	add(new User("kevin", 28));
	add(new User("lily", 27));
}};
System.out.println("list="+list);

1.2.1 List< User>轉Set< User>去重

Set<User> set = new HashSet<>(list);
System.out.println(set);
List<User> list3 = new ArrayList<>();
list3.addAll(set);
System.out.println("list3="+list3);

這樣操作是去重了,但是集合list3的順序和集合list的不一致

要讓去重後的集合和list集合順序一致,可以如下操作:

Set<User> set2 = new HashSet<>();
List<User> list4 = new ArrayList<>();
for (User user : list) {
	if(set2.add(user)) {
		list4.add(user);
	}
}
System.out.println("list4="+list4);

1.2.2 使用jdk8新語法List< User>去重

重寫equals()和hashCode()方法

List<User> list2 = list.stream().distinct().collect(Collectors.toList());
System.out.println("list2="+list2);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章