Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将哈希集的内容与映射进行比较_Java_Java 8_Hashset - Fatal编程技术网

Java 将哈希集的内容与映射进行比较

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

我有一张地图和一个哈希集。 目标是对照映射检查集合的内容,如果元素在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 : 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进行预检查。