Функциональный интерфейс + лямбда-выражение для суммы целых чисел в массиве - PullRequest
0 голосов
/ 19 февраля 2019

Я занимаюсь упражнением, в котором предлагается создать функциональный интерфейс, метод которого принимает в качестве входных данных целое число k и массив целых чисел и возвращает целое число.Затем я должен назначить экземпляру интерфейса лямбда-выражение, которое возвращает сумму всех значений в массиве, меньшую или равную k.

Для интерфейса я думаю, что я должен сделать что-то вроде:

@FunctionalInterface
public interface FunctionOnAnArray {
    int apply(int k, int ... intArray);
}

Однако я не могу понять лямбда-выражение.

public class Test {
    int sum = 0;
    FunctionOnAnArray f = (k, intArray) -> { for (int i : intArray) if (i <= k) sum += i; return sum; };
}

Это кажется слишком неуклюжим.

1 Ответ

0 голосов
/ 19 февраля 2019

Вы можете упростить это как:

FunctionOnAnArray f = (k, arr) -> Arrays.stream(arr)
    .filter(a -> a <= k)
    .sum();

В стороне : Вы также можете не определять интерфейс с Varargs и обновлять его как:

@FunctionalInterface
public interface FunctionOnAnArray {
    int apply(int k, int[] arr);
}
...