Сравните содержимое HashSet с картой - PullRequest
1 голос
/ 22 мая 2019

У меня есть карта и 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 : 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 ]

2 голосов
/ 22 мая 2019

, если вы хотите искать в значениях карты:

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

если вы хотите найти ключи

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

Имейте в виду, что вызовы содержат равные, поэтому в вашем классе A вы должны реализовать hashCode и equals.

2 голосов
/ 22 мая 2019
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}
1 голос
/ 22 мая 2019
for (String element : hSet) {
    if (!sb.containsKey(element)) {
        sb.put(element, A);
    }
}
0 голосов
/ 22 мая 2019

Следующее также может быть решением:

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