有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

共 (4) 个答案

  1. # 1 楼答案

    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);
    }
    

    输出

    {a=foo, b=b, c=ipsum, d=d, h=bar}
    
  2. # 2 楼答案

    for (String element : hSet) {
        if (!sb.containsKey(element)) {
            sb.put(element, A);
        }
    }
    
  3. # 3 楼答案

    如果要在地图值中搜索:

    if(!map.values().contains(a))
       // put a in the map
    

    如果你想找钥匙

    if(!map.containsKey(a))
      // put a in the map
    

    请记住,其中包含调用equals,因此在类中必须实现hashCode和equals

  4. # 4 楼答案

    以下也是解决方案:

    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));
        }