Java реверс без структур данных и ООПJAVA

Программисты JAVA общаются здесь
Anonymous
 Java реверс без структур данных и ООП

Сообщение Anonymous »

В целом, я пишу код с использованием функционального программирования, код должен делать то, что предназначено в main (), сущность заключается в следующем: нет структур данных, нет ООП (исключить потребитель и последовательность - хотя в этой задаче, кажется, это, кажется, Я, кстати, вы даже можете обойтись. Я использую Java 8. < /p>
Моя текущая задача: < /p>

»Решите, используя функции, скаляры, если ваше решение Требуется значение
, которое не является не скалярным, ни функцией - это неправильно. В Java (и, скажем, в Basic JS невозможно
это реализовать) - это неправильно »< /p>
< /blockquote>
Я написал следующий код и столкнулся с проблемами в лямбдах- я не понимаю, как реализовать «reverse ()», из-за того, что переменная должна быть окончательной. переопределить ">

Код: Выделить всё

import java.util.function.Consumer;
import java.util.function.Function;

public class Main {

public static void main(String[] args) {
Sequence numbers = range(10);
numbers = map(numbers, n -> n + 1);
numbers = reverse(numbers);
foreach(numbers, System.out::println);
}

public static Sequence range(int n) {
return c -> {
if (n > 0) {
range(n - 1).apply(c);
c.accept(n - 1);
}
};
}

public static  Sequence map(Sequence seq, Function f) {
return apply -> foreach(seq, x -> apply.accept(f.apply(x)));
}

public static  Sequence reverse(Sequence seq) {
return apply -> {
int count = 0;
foreach(seq, x -> count++);
for (int i = count - 1; i >= 0; i--) {
foreach(seq, x -> {
if (x.equals(i + 1)) {
apply.accept(x);
}
});
}
};
}

public static  void foreach(Sequence seq, Consumer c) {
seq.apply(c);
}

@FunctionalInterface
public interface Sequence {
void apply(Consumer c);
}
}
< /code>
Main.java:28: error: local variables referenced from a lambda expression must be final or effectively final
foreach(seq, x -> count++);
^
Main.java:31: error: local variables referenced from a lambda expression must be final or effectively final
if (x.equals(i + 1)) {
Как можно обратить вспять по -другому, чтобы обойти это ограничение (возможно, с изменением реализации других функций)?


Подробнее здесь: https://stackoverflow.com/questions/794 ... es-and-oop

Вернуться в «JAVA»