两个List合并去重 List<Student>

package com.test;
/**
 * user类
 * @author Magic
 *
 */
public class User {

	private String id;
	private String name;
	private String age;
	
	public User() {
		super();
	}

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

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public String getAge() {
		return age;
	}

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

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

main方法

package com.test;

import java.net.ConnectException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Test5 {

	public static void main(String[] args) throws ConnectException, Exception {
		// new6个对象
		User user = new User("1", "小明", "15");
		User user2 = new User("2", "小王", "15");
		User user3 = new User("3", "小东", "15");
		User user4 = new User("4", "小米", "15");
		User user5 = new User("5", "小海", "15");
		User user6 = new User("6", "小天", "15");

		// 定义两个list
		List<User> list = new ArrayList<User>();
		list.add(user);
		list.add(user2);
		list.add(user3);
		list.add(user4);

		List<User> list2 = new ArrayList<User>();
		list2.add(user5);
		list2.add(user6);
		// 该实体在list中也存在
		list2.add(user);

		// 去重合并(实体)
		for (User bean : list) {
			Iterator<User> iterator = list2.iterator();
			while (iterator.hasNext()) {
				User next = iterator.next();
				// 如果ID一样即为同一条数据
				if (next.getId().equals(bean.getId())) {
					iterator.remove();
				}
			}
		}

		list.addAll(list2);
		System.out.println(list);

	}
}

执行结果

[User [id=1, name=小明, age=15], User [id=2, name=小王, age=15], User [id=3, name=小东, age=15], User [id=4, name=小米, age=15], User [id=5, name=小海, age=15], User [id=6, name=小天, age=15]]

原文连接:https://blog.youkuaiyun.com/qq_20303591/article/details/108646398

### Java中HashList排序方法及实现方式 在Java中,`HashList` 并不是一个标准的数据结构名称。通常情况下,可能是指 `ArrayList<HashMap<K,V>>` 或者类似的复合数据结构。如果要对这种类型的集合进行排序,则需要明确以下几个方面: 1. **确定排序依据**:是按照 `HashMap` 的 key 还是 value 来排序? 2. **选择合适的工具类**:可以使用 `Collections.sort()` 配合自定义的 Comparator 实现排序[^3]。 3. **Lambda表达式的应用**:通过 Lambda 表达式简化 Comparator 的编写过程[^1]。 以下是针对不同场景的具体实现方式: #### 场景一:按 HashMap 的 Key 排序 当 `HashList` 是指一个包含多个 `HashMap<String, Integer>` 的列表时,可以通过以下代码实现按键排序: ```java import java.util.*; public class Main { public static void main(String[] args) { List<Map<String, Integer>> hashList = new ArrayList<>(); Map<String, Integer> map1 = new HashMap<>(); map1.put("bc", 10); map1.put("ad", 5); Map<String, Integer> map2 = new HashMap<>(); map2.put("cb", 8); map2.put("ad", 7); hashList.add(map1); hashList.add(map2); // 使用流操作提取所有的键并后再排序 List<String> sortedKeys = hashList.stream() .flatMap(m -> m.keySet().stream()) .distinct() .sorted() // 默认字典顺序 .toList(); System.out.println(sortedKeys); // 输出 ["ad", "bc", "cb"] } } ``` #### 场景二:按 HashMap 的 Value 排序 对于同样的 `HashList` 数据结构,也可以根据值来进行排序。下面是一个例子展示如何完成此任务: ```java import java.util.*; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Map<String, Integer>> hashList = new ArrayList<>(); Map<String, Integer> map1 = new HashMap<>(); map1.put("bc", 10); map1.put("ad", 5); Map<String, Integer> map2 = new HashMap<>(); map2.put("cb", 8); map2.put("ad", 7); hashList.add(map1); hashList.add(map2); // 提取所有条目并将它们合并到单个列表中以便于后续处理 List<Map.Entry<String, Integer>> entries = hashList.stream() .flatMap(m -> m.entrySet().stream()) // 将每个Map转成Entry Stream再拼接起来 .collect(Collectors.toList()); // 按照Value降序排列这些entries Collections.sort(entries, (entry1, entry2) -> entry2.getValue().compareTo(entry1.getValue())); // 打印结果 for (var entry : entries){ System.out.println(entry.getKey()+":"+entry.getValue()); } /* 可能输出如下(具体取决于输入数据) bc:10 cb:8 ad:7 ad:5 */ } } ``` 上述代码片段展示了两种不同的排序策略——一种基于Key另一种基于Value,并且都利用到了现代Java特性如Stream API 和 lambda expressions来提高可读性和效率[^4][^5]。 ### 注意事项 - 如果存在复项而希望保留唯一性,在收集阶段就应该考虑除冗余记录或者调整比较逻辑以适应业务需求。 - 当涉及到复杂对象比如 Student 类型作为元素存在于 list 中时候,记得提供清晰无误的 equals/hashCode 定义以及定制化 comparator 函数[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值