Можно ли пробежать по внутреннему массиву в списке ArrayList

Рейтинг: 0Ответов: 1Опубликовано: 06.06.2023

Есть список public static List<Note> noteList = new ArrayList<>();

Создается объект Note в списке ArrayList, в котором есть id, text и отдельный массив labels.

String[] labels = scn.nextLine().toUpperCase().split(" ");

В методе при создании объекта возвращается:

return new Note(IdInit.newId(), text, labels);

Возможно ли пробежаться по массиву labels внутри списка и вывести объекты с определенными метками labels? Например, если ввести метку = "важно", то выводятся все объекты, где есть метка "важно".

Ответы

▲ 0Принят

При наличии геттера для поля labels в классе Note, проверку можно выполнить так, преобразовывая массив в множество при помощи метода Set.of(E ... elements) (Java 11+), что позволит применить быстрый метод поиска Set::contains

String label = "важно";
for (Note note : noteList) {
    if (Set.of(note.getLabels()).contains()) {
        System.out.println(note);
    }
}

Аналогично, можно воспользоваться Stream API:

  • Преобразовывая массив меток в поток и применяя Stream::anyMatch (решение для Java 8)
noteList.stream() // Stream<Note>
    .filter(note -> Arrays.stream(note.getLabels()).distinct().anyMatch(search::equals))
    .forEach(System.out::println);
  • Используя аналогичное преобразование в сет:
noteList.stream() // Stream<Note>
    .filter(note -> Set.of(note.getLabels()).contains(search))
    .forEach(System.out::println);