Моя текущая задача: < /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