powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Простая рекурсия
8 сообщений из 8, страница 1 из 1
Простая рекурсия
    #39002259
friz777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть входные данные
GFg1f1g1f2g2f3g2g1

надо получить мапу
glist<f>g1[f1;f2]g2[f1;f2;f3]

и что-то я не догоняю как это реализовать с помощью рекурсии, подскажите плиз
...
Рейтинг: 0 / 0
Простая рекурсия
    #39002276
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
friz777есть входные данные
GFg1f1g1f2g2f3g2g1

надо получить мапу
glist<f>g1[f1;f2]g2[f1;f2;f3]

и что-то я не догоняю как это реализовать с помощью рекурсии, подскажите плиз

А зачем тут рекурсия?!
Когда достаточно цикла по исходному списку с засовыванием в результирующий кортеж...
...
Рейтинг: 0 / 0
Простая рекурсия
    #39002296
friz777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто тут может быть еще такой вариант
GFg1f1g2f2g2f3g3g1g4f4g4g3g5g4
...
Рейтинг: 0 / 0
Простая рекурсия
    #39002327
friz777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал как-то так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
List<SampleRecord> records = Lists.newArrayList();
Map<String,Set<String>> map = Maps.newHashMap();
.............................
records.add(new SampleRecord("G1","F1"));
records.add(new SampleRecord("G2","F2"));
records.add(new SampleRecord("G3","F3"));
records.add(new SampleRecord("G4","F4"));
records.add(new SampleRecord("G4","F5"));
records.add(new SampleRecord("G5","F6"));
records.add(new SampleRecord("G6","F7"));
records.add(new SampleRecord("G6","G4"));
records.add(new SampleRecord("G7","G3"));
records.add(new SampleRecord("G8","G7"));
..........................
//рекурсивная функция
public Set<String> findBook(String group){
        Set<String> books = Sets.newHashSet();
        records.stream()
                .filter(r -> group.equals(r.group))
                .map(SampleRecord::getFolder)
                .forEach(f -> {
                    if (isLast(f)){
                        books.add(f);
                    } else {
                        books.addAll(findBook(f));
                    }
                });
        return books;
}
//основной вызов
records.stream()
                .map(SampleRecord::getGroup)
                .distinct()
                .forEach(g -> map.put(g,findBook(g)));
...
Рейтинг: 0 / 0
Простая рекурсия
    #39002692
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
friz777,

Скорее всего нужен не List а Set?
Чтоб по три раза не добавлять.
...
Рейтинг: 0 / 0
Простая рекурсия
    #39002713
friz777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

Да, ты прав. Так и реализовано. :)
...
Рейтинг: 0 / 0
Простая рекурсия
    #39004452
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у guava есть замечательная коллекция multimap
...
Рейтинг: 0 / 0
Простая рекурсия
    #39004537
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
friz777,

Можно сделать Наследника Set , в который при добавлении нового элемента добавляет так же и его наследников.
Главное проверять, что элемент уже не добавлен - а то из цикла не выйдешь.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Простая рекурсия
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]