6 ms·
Consider two functions (excuse my Scala): val str: Function[String, String] = s => if (s.length > 3) s else null val num: Function[String, Integer] = s =>
by premium-concern 10y ago
Consider two functions (excuse my Scala):
val str: Function[String, String] = s => if (s.length > 3) s else null
val num: Function[String, Integer] = s => if (s == null) -1 else s.length
With Optional, you receive different results depending on whether you call map twice, or combine the functions first:
scala> Optional.of("Foo").map[String](str).map[Integer](num)
res12: java.util.Optional[Integer] = Optional.empty
scala> Optional.of("Foo").map[Integer](str.andThen(num))
res15: java.util.Optional[Integer] = Optional[-1]
This is incorrect and violates the functor law.