java中List和Map的去重

本文介绍如何使用Java实现List和HashMap的去重操作。对于List,通过removeAll和addAll方法合并两个无重复元素的List并确保结果List无重复;对于value有重复的HashMap,创建新Map并在遍历过程中检查新Map是否已包含当前value,以此实现去重。

一:List去重

问题:有List A和B,A和B中元素都是可保证没重复的,现要合并A、B得到新的List C,要求C中不能有重复元素

import java.util.ArrayList;
import java.util.List;

public class ArrayListTest {
	public static void main(String[] args) {
	List<String> A=new ArrayList<String>();
	A.add("a");
	A.add("b");
	A.add("c");
	System.out.println(A.toString());
	
	List<String> B=new ArrayList<String>();
	B.add("b");
	B.add("c");
	B.add("d");
	B.add("e");
	B.add("f");
	System.out.println(B.toString());
	
	//去重
	A.removeAll(B);
	A.addAll(B);
	System.out.println(A.toString());
	}
}


二:为value有重复的HashMap去重

import java.util.HashMap;
import java.util.Map;

public class HashMapTest {
	public static void main(String[] args) {
		//给出一个value有重复元素的map
		Map<Integer,String> map = new HashMap<Integer,String>();
		map.put(1, "aaa");
		map.put(2, "aaa");
		map.put(3, "bbb");
		map.put(4, "ccc");
		System.out.println(map.toString());
		
		//创建一个新的map2
		Map<Integer,String> map2=new HashMap<Integer,String>();
		for(Integer key:map.keySet()){
			if(!map2.containsValue(map.get(key))){
				map2.put(key, map.get(key));
			}
		}
		System.out.println(map2.toString());
	}
}




Java中,若要根据`name`属性对`List`进行,有多种实现方式。 ### 使用Java 8 Stream API 借助Java 8引入的Stream API,可利用`Collectors.toMap`方法按`name`属性,代码示例如下: ```java import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; class Student { private int id; private String name; private int age; public Student(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public String getName() { return name; } @Override public String toString() { return "Student{id=" + id + ", name='" + name + "', age=" + age + "}"; } } public class Main { public static void main(String[] args) { List<Student> students = new ArrayList<>(); students.add(new Student(1, "Alice", 20)); students.add(new Student(2, "Bob", 21)); students.add(new Student(3, "Alice", 22)); List<Student> distinctStudents = students.stream() .collect(Collectors.toMap(Student::getName, s -> s, (existing, replacement) -> existing)) .values() .stream() .collect(Collectors.toList()); distinctStudents.forEach(System.out::println); } } ``` ### 自定义方法 通过自定义方法,遍历列表并使用`Map`记录已存在的`name`属性,代码示例如下: ```java import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; class Student { private int id; private String name; private int age; public Student(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public String getName() { return name; } @Override public String toString() { return "Student{id=" + id + ", name='" + name + "', age=" + age + "}"; } } public class Main { public static List<Student> distinctByName(List<Student> students) { Map<String, Student> map = new HashMap<>(); for (Student student : students) { map.putIfAbsent(student.getName(), student); } return new ArrayList<>(map.values()); } public static void main(String[] args) { List<Student> students = new ArrayList<>(); students.add(new Student(1, "Alice", 20)); students.add(new Student(2, "Bob", 21)); students.add(new Student(3, "Alice", 22)); List<Student> distinctStudents = distinctByName(students); distinctStudents.forEach(System.out::println); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值