Как преобразовать Scala для l oop в Java - PullRequest
0 голосов
/ 09 июля 2020

Вот несколько строк кода, которые необходимо преобразовать в Java.

val geojsonSeq = for (kml <- kmlSeq) yield kmlConverter.toGeoJson(kml)

Я пытался преобразовать, используя для каждого l oop в java, используя оператор lamda, но не смог получить это.

kmlSeq.foreach((Function1<Option<Kml>, U>) (f) -> {
            
        });

Каждый раз, когда я получаю ошибку времени компиляции, например: «Метод foreach (Function1 ) неоднозначно для типа Seq

"

Кроме этого, если я собираюсь использовать обычно для каждого l oop in java, например:

for(Option<Kml> kml : kmlSeq)
        {
            
        }

In В этом случае kmlSeq выдает ошибку вроде: «Может выполняться только итерация по массиву или экземпляру java .lang.Iterable» Но в scala цикл kmlSeq переходит в объект Option.

1 Ответ

1 голос
/ 09 июля 2020

Вы можете использовать любой из двух способов (при условии, что тип возврата toGeo Json равен String)

List<String> result = kmlSeq
  .stream()
  .flatMap(kmlOpt -> 
    kmlOpt.map(Stream::of).orElseGet(Stream::empty)
  )
  .map(kml -> kmlConverter.toGeoJson(kml))
  .collect(Collectors.toList());

или

List<String> result = kmlSeq
  .stream()
  .flatMap(kmlOpt -> 
    kmlOpt.map(kml ->
      Stream.of(kmlConverter.toGeoJson(kml))
    ).orElseGet(Stream::empty)
  )
  .collect(Collectors.toList());

Для печати сделайте следующее

result.forEach(System.out::println);
...