Как стать автором
Обновить
1
0

Пользователь

Отправить сообщение
Первая задача так же хорошо решается с помощью dense_rank
Мы у себя решили эту проблему следующим путем:

public interface Settings {

    String property(String key);

    default String property(@NonNull String key, String defaultValue) {
        String value = property(key);
        return StringUtils.isBlank(value) ? defaultValue : value;
    }

    void setProperty(String key, String value);

    default void setProperty(@NonNull String key, @NonNull Object value) {
        setProperty(key, value.toString());
    }
	
	// default implementations like getPropertyAsInt, getPropertyAsList, etc
}

@Service("settingsBasedOnApplicationProperties")
public class SettingsBasedOnApplicationProperties implements Settings {

    private final Environment applicationProperties;

    @Autowired
    public SettingsBasedOnApplicationProperties(Environment applicationProperties) {
        this.applicationProperties = applicationProperties;
    }

    @Override
    public String property(@NonNull String key) {
        String value = applicationProperties.getProperty(key);
        return value == null? "" : value;
    }

    @Override
    public void setProperty(String key, String value) {
        throw new UnsupportedOperationException(
                "It's readonly service."
        );
    }
}

@AllArgsConstructor
@Service("settingsBasedOnDatabaseProperties")
public final class SettingsBasedOnDatabaseProperties implements Settings {

    private final SettingsRepository settingsRepository;

    @Override
    public String property(@NonNull String key) {
        Setting value = settingsRepository.findOne(key);
         return value == null ? "" : value.getValue();
    }


    public void setProperty(@NonNull String key, @NonNull String value) {
        settingsRepository.save(new Setting(key, value));
    }
}

@Service("settings")
public class SettingsImpl implements Settings {

    private final Settings applicationProperties;
    private final Settings databaseProperties;

    @Autowired
    public SettingsImpl(
            @Qualifier("settingsBasedOnApplicationProperties") Settings applicationProperties,
            @Qualifier("settingsBasedOnDatabaseProperties") Settings databaseProperties) {
        this.applicationProperties = applicationProperties;
        this.databaseProperties = databaseProperties;
    }

    @Override
    public String property(String key) {
        return StringUtils.isBlank(applicationProperties.property(key))
                ? databaseProperties.property(key)
                : applicationProperties.property(key);
    }

    @Override
    public void setProperty(String key, String value) {
        databaseProperties.setProperty(key, value);
    }
}


Таким образом, мы делаем Autowired для Settings и получаем значение проперти. Если она есть в конфиге (.properties файл или .yaml) или в environment variables — берем от туда. Если нет — берем с базы данных. Логику можно поменять и сделать значение в базе данных «главным». Похожим путем можно инкапсулировать получение значений с любых источников.
С Converter удобно использовать
 org.springframework.core.convert.ConversionService


Примерно так:
User user = conversionService.convert(userObject, User.class)


Spring сам найдет нужный Converter (по типу объекта userObject и target class) и вызовет converter.
Данные в таблицу можно теперь вставлять из Excel.

Можно пример?
Выгрузку результатов запроса в Excel стоит ли когда-нибудь ожидать?
В 8-м задании получается, что функция будет вызвана всё же 2 раза, только на втором вызове она упадет.
Ровно это же написано в документации… docs.python.org/3/library/smtplib.html
Как уже писали на Хабрахабре, лучшая проверка валидности email адреса — просто отправить на него письмо.
Сайту ничего не мешает вас забанить и при запросах в один поток. Всё упирается в разумную паузу между отправкой запросов или пачками запросов (скажем, отправляем N запросов, засыпаем на M секунд, снова отправляем и т.д.).
Возможно, стоило делать запросы к Kinopoisk в несколько потоков? Однопоточная версия скрипта не самая быстрая.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность