learn n rock
learn n rock

Reputation: 59

Compare contents of HashSet against a map

I have a Map and a HashSet. The goal is to check the contents of the Set against the Map and add it to the Map if the elements are there in the HashSet but not in the Map.

// 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 
    }
}

Upvotes: 1

Views: 124

Answers (4)

Anshul Singhal
Anshul Singhal

Reputation: 2201

Following could also be solution:

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

Upvotes: 0

Amit Kumar Lal
Amit Kumar Lal

Reputation: 5799

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

output

{a=foo, b=b, c=ipsum, d=d, h=bar}

Upvotes: 2

CodeRonin
CodeRonin

Reputation: 2109

if you want to search in map values:

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

if you want to look for keys

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

keep in mind that contains calls equals so in your A class you have to implement hashCode and equals.

Upvotes: 2

dibugger
dibugger

Reputation: 576

for (String element : hSet) {
    if (!sb.containsKey(element)) {
        sb.put(element, A);
    }
}

Upvotes: 1

Related Questions