HashMap中有{张三=3,李四=7,王五=9,刘六=5,田七=7,周七=3}这些元素,定义两个list和list2,将HashMap中 value值相同的元素从该HashMap集合中去掉,然后将剩余的元素中的姓名存入list中、编号存入list2中,并且打印到控制台上
时间: 2024-11-30 18:29:51 浏览: 72
首先,我们可以创建两个列表`nameList`用于存储姓名,`numberList`用于存储对应的数值。然后遍历HashMap,利用Java 8的Stream API来过滤出value值唯一的数据,最后将姓名和数值分别添加到对应的列表中。
以下是步骤的示例代码:
```java
import java.util.*;
import java.util.stream.Collectors;
Map<String, Integer> map = new HashMap<>();
map.put("张三", 3);
map.put("李四", 7);
map.put("王五", 9);
map.put("刘六", 5);
map.put("田七", 7);
map.put("周七", 3);
// 创建空列表
List<String> nameList = new ArrayList<>();
List<Integer> numberList = new ArrayList<>();
// 使用Stream API过滤并收集数据
Map.Entry<String, Integer>[] entries = map.entrySet().toArray(Map.Entry[]::new);
Map.Entry<String, Integer> uniqueEntry = Arrays.stream(entries)
.collect(Collectors.toMap(
Map.Entry::getKey, // 获取键
Map.Entry::getValue, // 获取值
(oldValue, newValue) -> oldValue, // 同一值保留旧项
LinkedHashMap::new // 保持插入顺序
));
// 将剩余数据添加到列表
uniqueEntry.forEach((name, num) -> {
nameList.add(name);
numberList.add(num);
});
// 打印到控制台
System.out.println("姓名列表: " + nameList);
System.out.println("数值列表: " + numberList);
```
运行这段代码后,你会看到控制台输出所有唯一的姓名和对应数值。注意,因为题目要求移除value值相同的元素,而`Collectors.toMap`默认的行为是替换冲突的key-value对,所以我们这里使用了一个链表映射(LinkedHashMap),它会保留原有的插入顺序,以便查看哪些名字被移除了。
阅读全文
相关推荐



















