class TemporalListUtils {
    
    private final TemporalFormattingUtils temporalFormattingUtils;
    
    public TemporalListUtils(final Locale locale, final ZoneId defaultZoneId) {
        super();
        Validate.notNull(locale, "Locale cannot be null");
        Validate.notNull(defaultZoneId, "ZoneId cannot be null");
        temporalFormattingUtils = new TemporalFormattingUtils(locale, defaultZoneId);
    }

    public List<String> listFormat(final List<? extends Temporal> target) {
        return listFormat(target, temporalFormattingUtils::format);
    }

    public <T extends Temporal> List<String> listFormat(final List<T> target, final Locale locale) {
        return listFormat(target, time -> temporalFormattingUtils.format(time, locale));
    }

    public <T extends Temporal> List<String> listFormat(final List<T> target, final String pattern) {
        return listFormat(target, time -> temporalFormattingUtils.format(time, pattern, null));
    }

    public <T extends Temporal> List<String> listFormat(final List<T> target, final String pattern, final Locale locale) {
        return listFormat(target, time -> temporalFormattingUtils.format(time, pattern, locale, null));
    }
    
    public List<Integer> listDay(final List<? extends Temporal> target) {
        return listFormat(target, temporalFormattingUtils::day);
    }
    
    public List<Integer> listMonth(final List<? extends Temporal> target) {
        return listFormat(target, temporalFormattingUtils::month);
    }

    public List<String> listMonthName(final List<? extends Temporal> target) {
        return listFormat(target, temporalFormattingUtils::monthName);
    }

    public List<String> listMonthNameShort(final List<? extends Temporal> target) {
        return listFormat(target, temporalFormattingUtils::monthNameShort);
    }

    public List<Integer> listYear(final List<? extends Temporal> target) {
        return listFormat(target, temporalFormattingUtils::year);
    }
    
    public List<Integer> listDayOfWeek(final List<? extends Temporal> target) {
        return listFormat(target, temporalFormattingUtils::dayOfWeek);
    }

    public List<String> listDayOfWeekName(final List<? extends Temporal> target) {
        return listFormat(target, temporalFormattingUtils::dayOfWeekName);
    }
    
    public List<String> listDayOfWeekNameShort(final List<? extends Temporal> target) {
        return listFormat(target, temporalFormattingUtils::dayOfWeekNameShort);
    }
    
    public List<Integer> listHour(final List<? extends Temporal> target) {
        return listFormat(target, temporalFormattingUtils::hour);
    }

    public List<Integer> listMinute(final List<? extends Temporal> target) {
        return listFormat(target, temporalFormattingUtils::minute);
    }

    public List<Integer> listSecond(final List<? extends Temporal> target) {
        return listFormat(target, temporalFormattingUtils::second);
    }

    public List<Integer> listNanosecond(final List<? extends Temporal> target) {
        return listFormat(target, temporalFormattingUtils::nanosecond);
    }

    public List<String> listFormatISO(final List<? extends Temporal> target) {
        return listFormat(target, temporalFormattingUtils::formatISO);
    }
    
    private <R extends Object, T extends Temporal> List<R> listFormat(
            final List<T> target, final Function<T, R> mapFunction) {<FILL_FUNCTION_BODY>}
    
}

        Validate.notNull(target, "Target cannot be null");
        return target.stream()
            .map(time -> mapFunction.apply(time))
            .collect(toList());
    
<no_super_class>