나는 당신 중 일부가 중복으로 표시하지만 다른 사람 스레드에서 비슷한 질문을하고 싶지 않았습니다.두 개의지도가 있습니다.
Map<Long, Long> map1 = new HashMap<>();
Map<Long, Long) map2 = new HashMap<>();
이 두지도는 크기가 다릅니다.지도는 다음과 같이 표시됩니다.
map1 map2
(1,1) (1,1)
(2,1) (2,1)
(3,1)
또는:
map1 map2
(1,1) (1,1)
(2,1) (2,1)
(3,1)
(4,1)
이제 map1과 map2의 차이점 만 포함하는 map3을 만들고 싶습니다. 즉, (K, V)-> (3,1) ((K, V)-> (3 , 1); (4,1)). 그런 다음 (K, V) 값을 가져와 사용합니다.이 스레드에서 비슷한 질문 에는 해결책이 있지만 저에게는 효과가 없습니다. compareKeysAndValues (map1, map2)
메소드로 전달, 수신 : 필수 Map < Long, Long > 제공 Map < Long, Boolean)
어떤 아이디어?
확실한 해결책은 두 맵의 키를 탐색하고 다른 맵에 키가없는 경우 새 맵에 항목을 추가하는 것입니다.
import java.util.HashMap;
import java.util.Map;
public class test {
public static void main(String[] args){
Map<Long, Long> map1 = new HashMap<>();
Map<Long, Long> map2 = new HashMap<>();
map1.put(1L, 1L);
map1.put(2L, 1L);
map1.put(5L, 1L);
map2.put(1L, 1L);
map2.put(2L, 1L);
map2.put(3L, 1L);
map2.put(4L, 1L);
Map<Long, Long> map3 = new HashMap<>();
for(Map.Entry<Long, Long> entry : map1.entrySet()){
if(!map2.containsKey(entry.getKey())){
map3.put(entry.getKey(), entry.getValue());
}
}
for(Map.Entry<Long, Long> entry : map2.entrySet()){
if(!map1.containsKey(entry.getKey())){
map3.put(entry.getKey(), entry.getValue());
}
}
for(Map.Entry<Long, Long> entry : map3.entrySet()){
System.out.println(entry.getKey() + ", " + entry.getValue());
}
}
}
산출:
3, 1
4, 1
5, 1