java — поиск слова в карте со списком в качестве значения

#java #string #collections #frameworks

#java #строка #Коллекции #фреймворки

Вопрос:

У меня есть .txt:

  1. строка: x, Munich, c, e, f
  2. строка: y, Berlin, ad, uf
  3. строка: z, Hamburg, of, bf

Все слова разделяются символом ‘,’.

Первые 2 строки одной строки в этом текстовом тексте отправляются в конструктор. 3. и следующие строки переходят в список. Например, ключом является: a b в форме конструктора Значение представляет собой ArrayList с: c, e, f. Итак, 3 элемента.

 String filePath = "....txt";

        List<String> itemlist = new ArrayList<String>();
        HashMap<Corporation, List> corp = new HashMap<Corporation, List>();

        String line;
        BufferedReader reader = new BufferedReader(new FileReader(filePath));
        while ((line = reader.readLine()) != null) {
            String[] parts = line.split(",", 3);
            if (parts.length >= 3) {
                String name = parts[0]; // key=name, value= address
                String address = parts[1];
                String info = parts[2];
                itemlist = new ArrayList<String>(Arrays.asList(info.split(",")));
                Corporation cor = new Corporation(name, address);
                corp.put(cor, itemlist);
            }
        }
  

Что все работает нормально.
Теперь мне нужно выполнить поиск строки в одном из списков массива на карте.
Например, я ищу строку «bf», и она печатает, что она нашла строку и где с помощью правильного ключа карты. Например, с помощью «bf»: будет напечатано «bf найдено в «z, Гамбург»».

 for (Entry<Corporation, List> entry : corp.entrySet()) {
            if (entry.getValue().equals("bf")) {
                System.out.println("Found at "   );
                System.out.println(entry.getKey());
            } else {
                System.out.println("String not found.");
            }
        }
  

Эта часть моего кода работает не так, как я хочу. Как мне сделать это правильно?

Комментарии:

1. Пожалуйста, определите вывод «не работает» / ожидаемый

Ответ №1:

if (entry.getValue().equals("bf")) сравнивает a List с a String .

Попробуйте это if (entry.getValue().contains("bf"))

Комментарии:

1. с помощью System.out.println(corp.entrySet()); я получаю вывод:

2. [Корпорация [имя = x, адрес = Мюнхен] =[ c, e, f ], Корпорация [имя = y, адрес = Берлин]=[ ad, uf], Корпорация [имя = z, адрес = Гамбург]=[ of, bf]]

3. Я думаю, у вас есть пробел перед вашими записями в списке. Попробуйте entry.getValue().contains(" bf") и посмотрите, получите ли вы "Found at"

Ответ №2:

 entry.getValue().equals("bf")
  

сравнивает список со строкой. Это никогда не может быть правдой.

Вы, скорее всего, хотите этого:

 entry.getValue().contains("bf")