Как инвертировать строки в массиве, имплементировав интерфейс Function?
Функциональное программирование - это про применение последовательности функций к аргументам (и про функции высшего порядка). Вообще, если коснулись функционального программирования и списков-массивов, то начинайте смотреть StreamAPI, это вот что ни на есть самая функциональщина в джаве. Вообще в джаве функциональное программирование не так чтобы очень хорошее, если эта тема интересна - идите в Котлин (или Скала, но Скала практически не применяется в промышленном программировании).

Вашу задачу можно решить, например, вот так:
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        Arrays.stream(args).map(Main::reverse).forEach(System.out::println);
    }

    private static String reverse(String s) {
        final StringBuilder result = new StringBuilder();
        for (char c : s.toCharArray()) {
            result.insert(0, c);
        }

        return result.toString();
    }
}

Тут интерфейс используется неявно (в функции map), туда подставлена другая функция - reverse. Если хочется - можно обернуть её в интерфейс.
В смысле, а чего тут непонятного ? У вас есть метод который на вход принимает String[] input, а выдать должен массив String[] но с инвертированными строками. Т е ровно тоже самое, что вы написали бы, если бы было так:
public String[] reverseString(String[] input) {
...
}