Я ищу подходящий рекурсивный способ достижения следующих результатов: Элемент A может иметь список L1, который содержит дополнительные элементы, такие как A, например. B, C и D. Эти элементы (B, C и D) также могут иметь список L2, L3, L4. Так что мне тоже нужно пройти эти списки. Фоном является то, что я хочу получить все объекты из всех списков всех элементов, которые содержат «LB» в конце их имени (извлекается getName()). Все объекты списков имеют один и тот же тип. Как я этого добиваюсь? Поскольку я не знаю, сколько будет элементов и списков, я думаю, что рекурсивное решение является единственным правильным?Рекурсивные элементы List-Elements, которые также могут иметь список
ответ
В принципе, у вас есть древовидная структура, что означает, что вам, вероятно, нужна какая-то форма обхода дерева. Давайте предположим, что мы имеем это древовидную структуру:
class Node<T>{
T value;
List<Node<T>> children = new ArrayList<>();
}
Теперь, если вы хотите применить обратный вызов C для каждого из этих узлов, вы будете делать что-то вроде этого:
public <T> void visit(Node<T> rootNode, Consumer c){
c.consume(rootNode.value);
rootNode.children.forEach(n -> visit(n, c));
}
Это называется пересечение глубины.
Wow thats кажется довольно сложно реализовать. Как заполнить это дерево моими данными и как я буду искать узел внутри этого дерева? – BlackACE
@BlackACE: Посмотрите на реализацию дерева в Java, должно быть много онлайн. – sotix
@sotix +1. Я бы предложил Guava ['TreeTraverser'] (http://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/TreeTraverser.html) класс –
Вы можете использовать flatmap: https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#flatMap-java.util.function.Function-
Какой "придавить" Список/массив.
Например:
l1.stream().flatMap(Collection::stream).map(e-> e.getName()).filter(e -> e.contains("LB")).collect(Collectors.joining());
Это хорошо работает с одним уровень гнездования, но не с произвольной глубиной –
- 1. JQuery сортировки, которые могут также группировать элементы вместе
- 2. Как перебирать элементы XML, которые могут иметь необязательные атрибуты?
- 3. Как отметить элементы, которые могут иметь события click?
- 4. Рекурсивные функции, которые меняют список в Haskell
- 5. , что все элементы могут иметь OnLoad свойство
- 6. Могут ли элементы массива иметь идентификаторы?
- 7. поиск слова, которые могут иметь шестнадцатеричные символы
- 8. Рекурсивные полимерные элементы
- 9. Рекурсивные Обратный Список
- 10. Выберите Отдельные записи (с общим количеством), которые также могут иметь сходства
- 11. список настраиваемых функций, которые могут быть вызваны
- 12. HTML элементы, которые могут вызвать запрос
- 13. Список языков программирования, которые могут взаимодействовать вместе
- 14. Все возможные теги html, которые могут иметь атрибут «src»
- 15. F #: Рекурсивные функции: объединить 2 списка, которые имеют общие элементы
- 16. Уникальные магистральные шины событий, которые также могут делиться глобальными событиями
- 17. (Scala) Списки, которые могут содержать списки как элементы
- 18. Список других приложений, которые могут быть прекращены
- 19. Получить список приложений, которые могут обмениваться данными
- 20. Получить список приложений, которые могут создать уведомление
- 21. Получить список приложений, которые могут воспроизводить музыку
- 22. Элементы не могут быть добавлены в список
- 23. Элементы множественного выбора AngularJS не могут иметь одинаковое значение
- 24. Node.JS разделяет капитализированные строки, которые могут иметь дефис в массив
- 25. MySQL: поиск слов, которые могут иметь интерферирующие символы между
- 26. Как автоматически сортировать QML ListElements в разделах?
- 27. Рекурсивные происходит через список (питон)
- 28. Пытается динамически создавать divs, которые также могут быть закрыты
- 29. Рекурсивные элементы подсчета многомерного массива
- 30. Как зашифровать строки, которые могут иметь не-базовые 64 символа
Ваши списки будут сохранены как свойства класса, или они будут находиться в корневом списке? –