반응형
효율적인 방법으로 Map에서 여러 키를 제거 하시겠습니까?
나는이 Map<String,String>
키 값 쌍 많은 수의. 이제 선택된 키를 제거하고 싶습니다 Map
. 다음 코드는 내가 그것을 달성하기 위해 무엇을했는지 보여줍니다.
Set keySet = new HashSet(); //I added keys to keySet which I want to remove.
그런 다음 :
Iterator entriesIterator = keySet.iterator();
while (entriesIterator.hasNext()) {
map.remove( entriesIterator.next().toString());
}
작동합니다. 내 요구 사항을 달성하는 더 좋은 방법은 무엇입니까?
제거 할 문자열을 사용자의 설정을 포함 가정하면 사용할 수 있습니다 방법 및 .keySet
map.keySet().removeAll(keySet);
keySet
이 맵에 포함 된 키의 Set 뷰를 반환합니다. 세트는 맵에 의해 지원되므로 맵에 대한 변경 사항이 세트에 반영되며 그 반대도 마찬가지입니다.
고안된 예 :
Map<String, String> map = new HashMap<>();
map.put("a", "");
map.put("b", "");
map.put("c", "");
Set<String> set = new HashSet<> ();
set.add("a");
set.add("b");
map.keySet().removeAll(set);
System.out.println(map); //only contains "c"
완전성을 위해서만 :
짐작할 수 있듯이 java.util.AbstractSet#removeAll
실제로 모든 항목을 반복하지만 약간의 트릭이 있습니다. 더 작은 컬렉션의 반복자를 사용합니다.
if (size() <= collection.size()) {
Iterator<?> it = iterator();
while (it.hasNext()) {
if (collection.contains(it.next())) {
it.remove();
}
}
} else {
Iterator<?> it = collection.iterator();
while (it.hasNext()) {
remove(it.next());
}
}
자바 스트림 사용하기 :
keySet.forEach(map::remove);
참고 URL : https://stackoverflow.com/questions/17675804/remove-multiple-keys-from-map-in-efficient-way
반응형
'IT story' 카테고리의 다른 글
Groovy에서 문자열이 null이 아닌 공백인지 어떻게 알 수 있습니까? (0) | 2020.08.03 |
---|---|
SCSS / SASS로 퍼센트 계산 (0) | 2020.08.03 |
문자열 보간에서 달러 기호를 이스케이프 처리 (0) | 2020.08.02 |
철저하고 상세한 g ++ 경고를 활성화하는 플래그 (0) | 2020.08.02 |
iOS 8의 엔터프라이즈 앱 업데이트 배포 (0) | 2020.08.02 |