
Sergey Demidov
12.04.2018
15:00:31

Igor
12.04.2018
15:00:34

Yan
12.04.2018
15:00:37
42

Igor
12.04.2018
15:00:43
только s -> Option.of(null)

Google

Alexander
12.04.2018
15:00:46
только "42"

Oleksandr
12.04.2018
15:00:48
42
ну тогда да, очередной кривой дизайн джава опшна

Igor
12.04.2018
15:00:52
Ваpиант с null никогда pаботать не должен

Alexander
12.04.2018
15:01:01
или менять orElse
т.к. после мапа был изменен тип
что тут не так?

Sergey
12.04.2018
15:01:14

Oleksandr
12.04.2018
15:01:17
не должно в мапе меняться содержимое опшна

Евгений
12.04.2018
15:01:27

Igor
12.04.2018
15:01:33

Alexander
12.04.2018
15:01:35

Sergey Demidov
12.04.2018
15:01:36
Оно не меняется

Oleksandr
12.04.2018
15:01:38
если в опшн зачем-то кто-то положил null, то пусть и лежит, не надо умничать

Google

Alexander
12.04.2018
15:01:54
что тут не очевидно и непонятно?

Igor
12.04.2018
15:02:11
map пpеобpазование над тем что ВНУТPИ контейнеpа
контейнеp map никак затpагивать не может и не должен

Oleksandr
12.04.2018
15:02:41
Оно не меняется
orElse проверяет, не пустой ли опшн, и, если пустой, выдает свою ветку?

Alexander
12.04.2018
15:02:56
нет же
что тогда по твоему должен делать мап в данном кейсе

Igor
12.04.2018
15:03:03
Выкидывать эксепшн
IllegalArgumentException

Евгений
12.04.2018
15:03:11

Igor
12.04.2018
15:03:37
Если не так – косячная pеализация

Alexander
12.04.2018
15:03:43

Oleksandr
12.04.2018
15:03:46

Igor
12.04.2018
15:03:48

Alexander
12.04.2018
15:04:09
а почему с нуллом нельзя? null -> Optional.empty()

Oleksandr
12.04.2018
15:04:16
про эксепшн спорно, но и с ним логичнее такого поведения

Igor
12.04.2018
15:04:50
давайте на котлине опишем функцию map:
fun <A, B> Optional<A>.map(f: (A) -> B): Optional<B>
А тепеpь подумаем вместе, может ли быть Optional<String?>

Sergey Demidov
12.04.2018
15:05:30

Oleksandr
12.04.2018
15:05:55
именно
тогда почему контейнер пустой?
мап поменял его?
если и тут все да, то говнодизайн

Google

Sergey Demidov
12.04.2018
15:06:12
map тебе возвращается Optional

Oleksandr
12.04.2018
15:06:20
мап _обязан_ не менять тип опшна
ну вообще вообще всегда

Alexander
12.04.2018
15:06:41
ну то есть если пам делает string -> 43 - это норма, а если string -> empty это говнодизайн?
че?

Igor
12.04.2018
15:06:48

Oleksandr
12.04.2018
15:06:56
печатаю иногда быстрее, чем думаю

Alexander
12.04.2018
15:07:16

Sergey Demidov
12.04.2018
15:07:20

Митко Соловец?
12.04.2018
15:07:28

Igor
12.04.2018
15:07:36
Optional может быть Some, может быть None. Объясните мне пожалуйста, как в map может Some замениться на None?
Если это смена типа контейнеpа, котоpая в map ПО КОНТPАКТУ не осуществима.

Alexander
12.04.2018
15:08:02

Sergey Demidov
12.04.2018
15:08:06
Optional a = Optional.of("a); b = a.map(...); a.get() == "a"

Oleksandr
12.04.2018
15:08:18
Functors must preserve identity morphisms
Functors preserve composition of morphisms

Митко Соловец?
12.04.2018
15:08:20
а смена стринг на интеджер - это не смена типа контейнера?

Igor
12.04.2018
15:08:32
У вас Some остается Some

Google

Oleksandr
12.04.2018
15:08:38

Alexander
12.04.2018
15:08:48
чем some отличается от none?

Igor
12.04.2018
15:09:04

Victor
12.04.2018
15:09:25
Братцы, вот реализация Optional.map
public <U> Optional<U> map(Function<? super T, ? extends U> mapper) {
if (!isPresent()) return empty();
return Optional.ofNullable(mapper.apply(value));
}

Sergey Demidov
12.04.2018
15:09:36
map возвращает новый optional со значением, преобразованным лямбдой

Igor
12.04.2018
15:09:41
https://gist.github.com/komigor/afb9c4115d750ec7dc15c18d405a4f3f
Тут должно быть видно, что такое Some и None, что такое map и в чем его отличие от flatMap.

Sergey Demidov
12.04.2018
15:10:07
хз что у вас тут на что меняется, но по моему поведение правильное

Oleksandr
12.04.2018
15:10:19

Alexander
12.04.2018
15:10:32
как вам такое Optional.ofNullable(null).map(n -> "streng").orElse("anothir streng");

Igor
12.04.2018
15:10:37

Victor
12.04.2018
15:10:38

Sergey Demidov
12.04.2018
15:10:57

Oleksandr
12.04.2018
15:11:01
Почему?
потому что потенциально (что и произошло в сабже) меняет тип опшна

Митко Соловец?
12.04.2018
15:11:04
логично
по джава коду

Oleksandr
12.04.2018
15:11:21

Victor
12.04.2018
15:11:25

Alexander
12.04.2018
15:11:50
как многим людям тяжело живется с жабкой то

Google

Oleksandr
12.04.2018
15:11:51

Igor
12.04.2018
15:11:57

Oleksandr
12.04.2018
15:12:10

Митко Соловец?
12.04.2018
15:12:17
какой поведение тогда должно быть?

Oleksandr
12.04.2018
15:12:25

Yan
12.04.2018
15:12:32
хз в чем вы проблему нашли

Oleksandr
12.04.2018
15:12:34
после orElse

Alexander
12.04.2018
15:12:36

Igor
12.04.2018
15:12:43
Так нельзя.

Sergey Demidov
12.04.2018
15:12:58
Как тебе orElse("a") вернет null?

Alexander
12.04.2018
15:13:07

Митко Соловец?
12.04.2018
15:13:08

Oleksandr
12.04.2018
15:13:33
и в джаве решили его просто вот так сломать

Igor
12.04.2018
15:13:51

Alexander
12.04.2018
15:14:36
вся эта вера в фундаментальные правила рушится когда они сталкиваются с реальностью

Oleksandr
12.04.2018
15:14:39

Yan
12.04.2018
15:14:40
@Test
public void testOptional() {
Optional<String> o1 = Optional.of("string");
Optional<String> o2 = o1.map(s -> null);
Assert.assertNotEquals(o1, o2);
}