Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Простая рекурсия / 8 сообщений из 8, страница 1 из 1
08.07.2015, 12:40
    #39002259
friz777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая рекурсия
есть входные данные
GFg1f1g1f2g2f3g2g1

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

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

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

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

А зачем тут рекурсия?!
Когда достаточно цикла по исходному списку с засовыванием в результирующий кортеж...
...
Рейтинг: 0 / 0
08.07.2015, 13:08
    #39002296
friz777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая рекурсия
просто тут может быть еще такой вариант
GFg1f1g2f2g2f3g3g1g4f4g4g3g5g4
...
Рейтинг: 0 / 0
08.07.2015, 13:31
    #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
08.07.2015, 17:47
    #39002692
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простая рекурсия
friz777,

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

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

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


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