Как проверить значение, присутствующее внутри карты в JAVA

Я хочу найти значение, присутствующее на карте или нет у меня вот такая карта

 Map<String, Object> eMap = new HashMap<String, Object>();
 Set<String> wList = new HashSet<>();
 eMap.put("DATA LIST", wList);

предполагая, что набор содержит ['aaa', 'bbb']; как проверить наличие «ааа» на карте?

Спасибо. :)

Не может быть Map<String, List<String>>? Это было бы намного проще

Andronicus 21.03.2019 07:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
840
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

В вашем примере eMap будет типа Map<String, List<String>>. Это было бы намного проще. Затем вам придется перебирать значения для проверки:

eMap.values().stream().anyMatch(l -> l.contains("aaa"));

И определение карты:

Map<String, Set<String>> eMap = new HashMap<>();

Я считаю, что это должно быть Map<String, Set<String>> не Map<String, List<String>>

Amit Bera 21.03.2019 07:38
    Map<String, Set<String>> eMap = new HashMap<>();
    Set<String> wList = new HashSet<>();
    wList.add("aaa");
    wList.add("bbb");

    eMap.put("DATA LIST", wList);

    System.out.println(
            eMap.values().parallelStream().flatMap(set -> set.stream()).anyMatch(set -> set.contains("bbb")));

Если вы хотите искать значения в наборах вашей карты, это работает следующим образом. Вы сопоставляете все наборы с одним потоком, а затем проверяете, присутствует ли искомое значение.

Также рекомендую использовать

Map<String, Set<String>> 

вместо

Map<String, Object>

потому что тогда вам не нужно будет приводить (безопасность типа)

Вы можете использовать функцию потокового API Java 8. eMap.entrySet().stream().filter(e -> e.getValue().contains('aaa'))

Затем данные могут быть сохранены в новой карте или списке или как угодно.

Ответ принят как подходящий

Вы можете проверить это следующим образом:

Использование Java 8:

public static boolean checkValueExists(Map<String, Object> eMap, String searchedValue){
    return eMap.values().parallelStream()
            .flatMap(set -> ((Set<String>)set).stream())
            .anyMatch(set -> set.contains(searchedValue));
}

Нормальный путь:

public static boolean checkValueExists(Map<String, Object> eMap, String searchedValue){
            for (Map.Entry<String, Object> item : eMap.entrySet()) {
                String key = item.getKey();
                Set<String> setValue = (Set<String>) item.getValue();

                if (setValue.contains(searchedValue)){
                    return true;
                }

            }
            return false;
        }

Здесь вам нужно повторить Map<String, Object> eMap . Получите его значение, которое равно Set<String>. Теперь вам нужно найти setValue для searchedValue.

Вот набор данных:

Map<String, Object> eMap = new HashMap<>();
        Set<String> numberList = new HashSet<>();
        numberList.add("Number 1");
        numberList.add("Number 2");
        numberList.add("Number 3");
        eMap.put("Number LIST", numberList);


        Set<String> fruitList = new HashSet<>();
        fruitList.add("Apple");
        fruitList.add("Banana");
        fruitList.add("Tomato");
        eMap.put("Fruit LIST", fruitList);

        String searchedValue = "Number 3";

        System.out.println("Is Value exists :"+checkValueExists(eMap,searchedValue));

Я бы не рекомендовал использовать parallelStream() против stream(), если нет реальной причины для использования.

noiaverbale 21.03.2019 08:24

Другие вопросы по теме