做网站说什么5.0啥意思,深圳有名设计公司有哪些,做一份网站的步zou,企业网站建设优化合并两个Map
map自己的方法 实现方式是通过 putAll() 方法将多个 map 对象中的数据放到另外一个全新的 map 对象中#xff0c;代码如下所示#xff0c;展示了两个 map 对象的合并#xff0c;如果是多个 map 合并也是用这种方式。 public static void main(String[] args) {…合并两个Map
map自己的方法 实现方式是通过 putAll() 方法将多个 map 对象中的数据放到另外一个全新的 map 对象中代码如下所示展示了两个 map 对象的合并如果是多个 map 合并也是用这种方式。 public static void main(String[] args) {MapString, String map1 new HashMapString, String();map1.put(one, 一);map1.put(two, 二);map1.put(three, 三);MapString, String map2 new HashMapString, String();map1.put(ten, 十);map1.put(nine, 九);map1.put(eight, 八);// 合并MapString, String combineResultMap new HashMapString, String();combineResultMap.putAll(map1);combineResultMap.putAll(map2);// 合并后打印出所有内容for (Map.EntryString, String entry : combineResultMap.entrySet()) {System.out.println(entry.getKey() : entry.getValue());}}
java8合并两个Map
需求如果两个Map有冲突则Value取第二个Map中的Value
例子准备
实体类
import lombok.*;
Getter
Setter
ToString
AllArgsConstructor
NoArgsConstructor
public class Employee {private Long id;private String name;
}新建两个MapString,Employee
private static MapString, Employee map1 new HashMap();private static MapString, Employee map2 new HashMap();static {Employee employee1 new Employee(1L, Henry);map1.put(employee1.getName(), employee1);Employee employee2 new Employee(22L, Annie);map1.put(employee2.getName(), employee2);Employee employee3 new Employee(8L, John);map1.put(employee3.getName(), employee3);Employee employee4 new Employee(2L, George);map2.put(employee4.getName(), employee4);Employee employee5 new Employee(3L, Henry);map2.put(employee5.getName(), employee5);}在java8之前我们合并
Testpublic void fun0() {MapString, Employee map3 new HashMap(map1);for (Map.EntryString, Employee entry : map2.entrySet()) {if (map3.containsKey(entry.getKey())) {map3.put(entry.getKey(), new Employee(map3.get(entry.getKey()).getId(), entry.getValue().getName()));}else{map3.put(entry.getKey(), entry.getValue());}}}java8之后
1.用map提供的merge()方法来合并
Testpublic void fun1() {MapString, Employee map3 new HashMap(map1);map2.forEach((key, value) - map3.merge(key, value, (v1, v2) - new Employee(v1.getId(),v2.getName())));map3.forEach((k,v)- System.out.println(k:v));}merge方法有三个参数第一个是要合并的Key第二个是合并的Value第三个是一个接收两个参数的函数它的作用就如我们上面的对于重复的key处理的逻辑一样你可以自定义v1是map2中的值v2是map3中重复的值。
2.用Stream.concat来合并
Stream.contcat接收两个值顺序的将两个集合中的数据加入流中然后再用收集器变成Map Testpublic void fun2() {StreamMap.EntryString, Employee concat Stream.concat(map1.entrySet().stream(), map2.entrySet().stream());MapString, Employee collect concat.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (value1, value2) - new Employee(value1.getId(), value1.getName())));collect.forEach((k,v)- System.out.println(k:v));}3.用Stream.of()创建流后合并
和contact不同的是stream.of可以初始化多个元素,然后用扁平化的处理成需要的流然后用收集器来转为Map
Testpublic void fun3() {MapString, Employee collect Stream.of(map1, map2).flatMap(x - x.entrySet().stream()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (v1, v2) - new Employee(v1.getId(), v2.getName())));collect.forEach((k,v)- System.out.println(k:v));}4.直接用Collector来收集
Testpublic void fun4() {MapString, Employee map3 map2.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue,(v1, v2) - new Employee(v1.getId(), v2.getName()),() - new HashMap(map1)));map3.forEach((k,v)- System.out.println(k:v));}