Java для понимания

В Scala я могу написать такой короткий метод:

def xy(
  maybeX: Option[String],
  maybeY: Option[String]): Option[String] = {

  for {
    x <- maybeX
    y <- maybeY
  } yield {
    s"X: $x Y: $y"
  }
}

Есть ли что-то подобное в Java, когда речь идет о двух или более переменных Optional<>?


person Lasse Frandsen    schedule 08.03.2019    source источник
comment
Конечно, вы можете сделать что-то подобное, хотя это будет больше синтаксиса, поскольку Java не имеет поддержки функционального программирования первого класса.   -  person Thomas    schedule 08.03.2019
comment
Чтобы увеличить вероятность получения более полезных ответов, вы можете объяснить, что делает код Scala, чтобы люди, которые не знают Scala, могли видеть, что вы пытаетесь сделать.   -  person Sweeper    schedule 08.03.2019
comment
@Sweeper Вполне разумно спросить, как конвертировать с одного языка на другой, не объясняя, как эти языки работают. Если вы не понимаете один из языков, не отвечайте на вопрос.   -  person Tim    schedule 08.03.2019
comment
@ Тим, я никогда не говорил, что неразумно задавать такой вопрос. Я сказал «чтобы получить больше полезных ответов».   -  person Sweeper    schedule 08.03.2019
comment
@Sweeper Вы не получите более полезного ответа от того, кто не понимает Scala.   -  person Tim    schedule 08.03.2019


Ответы (1)


Это будет подходящей альтернативой:

Optional<String> maybeXY = maybeX.flatMap(x -> maybeY.map(y -> x + y));

scala для понимания — это просто синтаксический сахар для вызовов map, flatMap и filter.

Вот хороший пример: map/flatMap to для понимания

person senjin.hajrulahovic    schedule 08.03.2019
comment
Я бы, наверное, тоже так написал на Scala :-) - person Thilo; 08.03.2019
comment
Похоже, вы не понимаете значения нотации for-comprehension в Scala или нотации do в Haskell. Дело в том, что for-comprehension Scala обеспечивает аккуратный синтаксис для длинных цепочек вызовов flatMap и map. В Java вы получите перекошенную вправо цепочку вызовов методов с множеством круглых скобок, что сделает код неаккуратным и трудным для понимания. - person Random dude; 29.02.2020