В моей команде было бы интересно также спросить о некотором обзоре кода ... Проблема здесь в том, что если вы разрешите nullable
Comparator
, то вы немного побьете цель. argument
, то есть Comparator
, а - null
, является совершенно допустимым значением естественного порядка сортировки, что означает, что это совершенно верно:
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(1);
Collections.sort(list, null);
Даже если ваша внутренняя реализация не разрешит это как есть, это означает:
List.of(4, 3, 2)
.stream()
.sorted(null)
.forEachOrdered(System.out::println);
выдаст NullPointerException
.
Итак если только вы четко не задокументируете, каково ваше намерение использовать этот метод, пользователи могут быть сбиты с толку (я бы).
ИМХО не так уж много кода для "дублирования", и вы могли бы принудить пользователейпередать Function
, который возвращает «что-то», то есть Comparable
, выполнив:
public static <T, G extends Comparable<? extends G>> List<G> sortedToListOfNewType(
List<T> inputList,
Function<T, G> mapperFunction) {
return Stream.ofNullable(inputList)
.flatMap(List::stream)
.map(mapperFunction)
.sorted()
.collect(Collectors.toList());
}
public static <T, G> List<G> toListOfNewType(
List<T> inputList,
Function<T, G> mapperFunction) {
return Stream.ofNullable(inputList)
.flatMap(List::stream)
.map(mapperFunction)
.collect(Collectors.toList());
}
Недостатком является то, что 1) дублирующий код - что вы пытаетесь избежать во всех смыслах, кажется, 2) они могутНе следует перегружать методы - поскольку стирание одинаково и компилятор не допустит этого.
Но, как уже говорилось, этот подход очень субъективен.