Java 将哈希集的内容与映射进行比较
我有一张地图和一个哈希集。 目标是对照映射检查集合的内容,如果元素在HashSet中,但不在映射中,则将其添加到映射中Java 将哈希集的内容与映射进行比较,java,java-8,hashset,Java,Java 8,Hashset,我有一张地图和一个哈希集。 目标是对照映射检查集合的内容,如果元素在HashSet中,但不在映射中,则将其添加到映射中 // Map is defined in a class private final Map<String, A> sb = new ConcurrentHashMap<>(); public void someMethod() { Set<A> hSet = new HashSet<>(); for (A a
// Map is defined in a class
private final Map<String, A> sb = new ConcurrentHashMap<>();
public void someMethod() {
Set<A> hSet = new HashSet<>();
for (A a : ab){
hSet.add(a..a...);
// Check if all elements added to hash Set are there in a Map
// if not present, add it to Map
}
}
如果要在地图值中搜索:
if(!map.values().contains(a))
// put a in the map
如果你想找钥匙
if(!map.containsKey(a))
// put a in the map
请记住,其中包含调用equals,因此在类中必须实现hashCode和equals。如果要在映射值中搜索:
if(!map.values().contains(a))
// put a in the map
public static void main(String[] args) {
Set<String> set = Stream.of("a","b","c","d").collect(Collectors.toSet());
Map<String, String> map = new HashMap<String, String>();
map.put("a", "foo");
map.put("h", "bar");
map.put("c", "ipsum");
for (String string : set) {
if(!map.containsKey(string)) {
map.put(string,string);
}
}
System.out.println(map);
}
如果你想找钥匙
if(!map.containsKey(a))
// put a in the map
请记住,其中包含调用equals,因此在类中必须实现hashCode和equals。以下也是解决方案:
public static void main(String[] args) {
Set<String> set = Stream.of("a","b","c","d").collect(Collectors.toSet());
Map<String, String> map = new HashMap<String, String>();
map.put("a", "foo");
map.put("h", "bar");
map.put("c", "ipsum");
for (String string : set) {
if(!map.containsKey(string)) {
map.put(string,string);
}
}
System.out.println(map);
}
private final Map<String, A> sb = new ConcurrentHashMap<>();
public void someMethod() {
Set<String> set = new HashSet<>();
set.stream().filter(word -> !sb.containsKey(word))
.forEach(word -> sb.put(word, correspondingValueOfTypeA));
}
以下也是解决方案:
private final Map<String, A> sb = new ConcurrentHashMap<>();
public void someMethod() {
Set<String> set = new HashSet<>();
set.stream().filter(word -> !sb.containsKey(word))
.forEach(word -> sb.put(word, correspondingValueOfTypeA));
}
你能举一个输入和输出的例子吗?你的代码不清楚你想做什么。什么是字符串键?您不再需要按照回答者的建议检查.containsKey或.contains-在Java 8中,您可以使用map.putIfAbsentk,但不清楚您想做什么,但您应该能够执行ab.forEacha->sb.putIfAbsentkey,a;您会在哪个键下将A放入映射?@StephenP因为这是一个ConcurrentHashMap,所以它始终支持putIfAbsent方法。事实上,如果更新应该是线程安全的,那么您必须使用它,而不是通过containsKey进行预检查。您能给出一个输入和输出的示例吗?你的代码不清楚你想做什么。什么是字符串键?您不再需要按照回答者的建议检查.containsKey或.contains-在Java 8中,您可以使用map.putIfAbsentk,但不清楚您想做什么,但您应该能够执行ab.forEacha->sb.putIfAbsentkey,a;您会在哪个键下将A放入映射?@StephenP因为这是一个ConcurrentHashMap,所以它始终支持putIfAbsent方法。事实上,如果更新应该是线程安全的,那么必须使用它,而不是通过containsKey进行预检查。