#java #arrays #generics #java-8
#java #массивы #дженерики #java-8
Вопрос:
Я пытаюсь реализовать методы «и» и «или» в бифункции так, как мы используем в предикатах.
Итак, мой функциональный интерфейс bifunction имеет один абстрактный метод, который принимает два объекта в качестве аргументов и возвращает список.
Я попробовал это:
public interface TriFunctionInterface<T, U, R> {
List<R> applyFilter(T t, U u, List<R> r);
default TriFunctionInterface or(TriFunctionInterface other) {
Objects.requireNonNull(other);
return (T t, U u, List<R> r) -> {
List<R> finalList = new ArrayList<>();
List<R> filteredObjects1 = applyFilter(t, u, r);
List<R> filteredObjects2 = other.applyFilter(t, u, r);
finalList.addAll(filteredObjects1);
finalList.addAll(filteredObjects2);
return finalList;
};
}
}
Но, похоже, это выдает мне ошибку в этой строке: ‘return (T t, U u, List r) -> {‘
Комментарии:
1. Итак, ваш вопрос в основном звучит так: «Как мне создать список, содержащий элементы, которые существуют в двух других списках», верно? Что вы уже пробовали? Каким может быть алгоритм для этого?
2. @JBNizet Я добавил в вопрос то, что я пробовал.
Ответ №1:
кажется, это выдает мне ошибку
Это действительно выдает ошибку, в которой говорится:
Error:(11, 16) java: incompatible types: incompatible parameter types in lambda expression.
Эта ошибка вызвана тем фактом, что ваш метод использует необработанные типы вместо правильных универсальных типов. Это должно быть
default TriFunctionInterface<T, U, R> or(TriFunctionInterface<T, U, R> other)
Комментарии:
1. Хорошо, так это значит, что я не могу использовать list в лямбда-аргументах? Тогда есть ли способ рассматривать R как список? потому что я использую методы списка в моем методе «или» на R.
2. Почему вы не могли. Просто замените объявление вашего метода (с использованием необработанных типов) на мое (без использования необработанных типов), и ваш код будет скомпилирован. Вам просто нужно скопировать и вставить.
3. Да, это так! Я думаю, я потрачу больше времени, чтобы понять концепции, стоящие за этим. Спасибо!