Я отправляю этот ответ, потому что мой интерфейс администратора Virtualmin / Webmin решил, что было бы неплохо отключить мой PHP-движок. Я нашел время, чтобы найти решение, поэтому я решил поделиться с ним вы, ребята:
Также не забудьте проверить, что ни один из ваших конфигурационных файлов вашего сайта, связанных с этим конкретным хостом или виртуальным хостом, не имеет в них php_admin_value, которые отключают PHP, например:
php_admin_value engine Off
В случае сомнений прокомментируйте это ...
# php_admin_value engine Off
И перезагрузите свой веб-сервер.
Если вы просто хотите преобразовать имеющийся код, вы можете использовать следующий фрагмент:
List<Integer> result = IntStream.range(0, list.size())
.mapToObj(i -> list.subList(i, list.size()))
.flatMap(l -> IntStream.rangeClosed(1, l.size()).mapToObj(i -> l.subList(0, i).stream().reduce(0, Integer::sum)))
.collect(Collectors.toList());
Это создает Intstream
из 0
в n - 1
и отображает все списки, которые пункты должны быть подведены. Эти списки снова сопоставляются с фактическими позициями для расчета суммы. Это включено в шаге reduce
. В конце все потоки сливаются и, наконец, собираются в список результатов:
[640, 1120, 1640, 1810, 2130, 2270, 2330, 480, 1000, 1170, 1490, 1630, 1690, 520, 690, 1010, 1150, 1210, 170, 490, 630, 690, 320, 460, 520, 140, 200, 60]
Я чувствую, что это намного больше похоже на алгоритм, давайте пойдем шаг за шагом
1) Сначала получим все подсписки, исключив первое целое число в каждой итерации
List<Integer> list=Arrays.asList(640,480,520,170,320,140,60);
List<List<Integer>> re = IntStream.range(0, list.size())
.mapToObj(sb->list.subList(sb, list.size()))
.filter(s->s.size()>1)
.collect(Collectors.toList());
re.forEach(ls->System.out.println(ls));
Выходные данные
[640, 480, 520, 170, 320, 140, 60]
[480, 520, 170, 320, 140, 60]
[520, 170, 320, 140, 60]
[170, 320, 140, 60]
[320, 140, 60]
[140, 60]
2) Теперь в каждом списке есть сумма
List<List<Integer>> re1 = re.stream()
.map(j->IntStream.rangeClosed(2, j.size()).mapToObj(sl->j.stream().limit(sl).mapToInt(Integer::intValue).sum()).collect(Collectors.toList()))
.collect(Collectors.toList());
re1.forEach(ls->System.out.println(ls));
Выходные данные
[1120, 1640, 1810, 2130, 2270, 2330]
[1000, 1170, 1490, 1630, 1690]
[690, 1010, 1150, 1210]
[490, 630, 690]
[460, 520]
[200]
Комбинированное решение шага 1 и шага 2
List<List<Integer>> re = IntStream.range(0, list.size())
.mapToObj(sb->list.subList(sb, list.size()))
.filter(s->s.size()>1)
.map(j->IntStream.rangeClosed(2, j.size()).mapToObj(sl->j.stream().limit(sl).mapToInt(Integer::intValue).sum()).collect(Collectors.toList()))
.collect(Collectors.toList());