Я пытаюсь создать общий метод findMax (Список списка), который принимает либо List of LocalDate, либо List of Date type, и возвращает максимальное значение в списке.Как написать общий метод findMax() с помощью collections.max()?
Collections.max (List LocalDate) и Collections.max (List Date) работают отлично, но я не знаю, как вернуть его обратно.
Не понимаю, как компаратор работает на Java.
Ниже моя попытка
static List<LocalDate> localDateList = new ArrayList<LocalDate>();
static List<Date> dateList = new ArrayList<Date>();
private <T> T findMax(List<T> list) {
return Collections.max(list);
}
public static void main(String[] args) throws ParseException, SQLException, JsonProcessingException {
localDateList.add(new Date(11 * 86400000).toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
localDateList.add(new Date(22 * 86400000).toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
localDateList.add(new Date(3 * 86400000).toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
localDateList.add(new Date(14 * 86400000).toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
localDateList.add(new Date(65 * 86400000).toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
dateList.add(new Date(11 * 86400000));
dateList.add(new Date(22 * 86400000));
dateList.add(new Date(3 * 86400000));
dateList.add(new Date(14 * 86400000));
dateList.add(new Date(65 * 86400000));
System.out.println(Collections.max(localDateList));
System.out.println(Collections.max(dateList));
System.out.println(findMax(localDateList));
System.out.println(findMax(dateList));
}
Редакцией: Понял работать путем изменения от
private <T> T findMax(List<T> list) {
return Collections.max(list);
}
в
private <T extends Object & Comparable<? super T>> T findMax(List<T> list) {
return Collections.max(list);
}
'Collections.max' уже возвращает« правильный »тип назад. Например, 'String s = Collections.max (yourListOfString)' будет компилироваться. –
В чем проблема с размещенным кодом? Почему вы пытаетесь объединить Collections.max() в метод, выполняющий то же самое? И если вы действительно этого хотите, почему бы вам не использовать те же общие типы, что и Collections.max()? –
Он говорит вам, что это объект из-за стирания стилей. Типичные типы известны только компилятору во время компиляции и в то же время актуальны. Они там, чтобы избежать небезопасных бросков как можно больше. – HopefullyHelpful