метод, предоставленный orElse (), не выполняется вообще - PullRequest
0 голосов
/ 17 декабря 2018

В приведенном ниже коде я пытаюсь понять концепцию Optional, предлагаемую в java-8.Я создал приведенный ниже пример, чтобы понять принцип, лежащий в основе orElse ().После выполнения кода тело defaultMethod () было выполнено и вернуло

new User("DEFAULT_USER", "default@gmail.com", "0000", null);

объекту y.оператор журнала печатал правильные данные, как я и ожидал.

Вопрос в том, почему не были напечатаны все журналы внутри defaultMethod () ??isElse () был введен для возврата значений только без выполнения всего тела предоставленного метода .?

code :

 @Override
protected void onResume() {
    super.onResume();

    User user_1 = this.getUser_1();
    User user_2 = this.getUser_2();
    User user_3 = this.getUser_3();

    User y = OptionalsUtils.toOptional(user_1)
            .map(u1 -> this.getUser_3())
            .orElse(this.defaultMethod());
    Log.i(TAG_LOG, "orElse->y: " + y.getUserName());

}

private User getUser_3() {
    List<String> list = new ArrayList<String>(5);
    list.add("espn");
    list.add("qtv");
    list.add("der Spiegel");
    list.add("deutsch welle");

    User user = new User();
    user.setUserName("johannas");
    user.setUserEmailAddres("joha90@gmail.com");
    user.setUserId("2345");
    user.setUserFavoritesTvList(null);
    return null;
}

private User defaultMethod() {
    Log.w(TAG_LOG, "defaultMethod is called1");
    Log.w(TAG_LOG, "defaultMethod is called2");
    Log.w(TAG_LOG, "defaultMethod is called3");
    Log.w(TAG_LOG, "defaultMethod is called4");
    Log.w(TAG_LOG, "defaultMethod is called5");
    Log.w(TAG_LOG, "defaultMethod is called5");
    Log.w(TAG_LOG, "defaultMethod is called5");
    Log.w(TAG_LOG, "defaultMethod is called5");

    return new User("DEFAULT_USER", "default@gmail.com", "0000", null);
}

log :

2018-12-17 12:46:15.774 20158-20158/com.example.optionals_00 W/ActMain: defaultMethod is called1
2018-12-17 12:46:15.774 20158-20158/com.example.optionals_00 W/ActMain: defaultMethod is called2
2018-12-17 12:46:15.774 20158-20158/com.example.optionals_00 W/ActMain: defaultMethod is called3
2018-12-17 12:46:15.774 20158-20158/com.example.optionals_00 W/ActMain: defaultMethod is called4
2018-12-17 12:46:15.774 20158-20158/com.example.optionals_00 W/ActMain: defaultMethod is called5
2018-12-17 12:46:15.774 20158-20158/com.example.optionals_00 W/ActMain: defaultMethod is called5
2018-12-17 12:46:15.774 20158-20158/com.example.optionals_00 I/ActMain: orElse->y: DEFAULT_USER

1 Ответ

0 голосов
/ 17 декабря 2018

Это не проблема, связанная с orElse.Эти две пропущенные строки пропускаются Logcat, потому что они идентичны.

Если Logcat обнаружит повторяющиеся журналы, он покажет только первый и последний, а между ними вы должны увидеть сообщение, подобное этому:

04-16 03: 24: 21.591 I: uid = 10085 (u0_a85) xxx.yyy.zzz идентичные 2 строки

Такое поведение началось в версии 3.1 Android Studio.Проблема была открыта , чтобы решить эту проблему, потому что многим это не понравилось, поэтому она была удалена в версии 3.2 Android Studio.Поэтому, если вы используете Android Studio 3.0 или 3.2, должны отображаться все ваши журналы, даже если они идентичны.

...