Посмотрите на BinaryOperator
, которая представляет операцию над двумя операндами одного и того же типа, которая дает результат того же типа, что и операнды.
public static <T> List<T> someMethodName(List<T> list1, List<T> list2,
BinaryOperator<List<T>> converter) {
return converter.apply(list1, list2);
}
BiFunction
- это еще один вариант, поскольку он представляет функцию, которая принимает два аргумента и выдает результат.
public static <T, R> List<R> someMethodName(List<T> list1, List<T> list2,
BiFunction<List<T>, List<T>, List<R>> converter) {
return converter.apply(list1, list2);
}
Для вызова функции предположим, что у вас есть два списка целых чисел, например sakes:
List<Integer> first = ....
List<Integer> second = ....
и вы хотите объединить их, вы передадите оба списка и поведение, например
List<Integer> concat = someMethodName(first, second,
(l, r) -> Stream.concat(l.stream(), r.stream())
.collect(Collectors.toList()));