Java код на Scala. Вызов метода интерфеса

259
22 июля 2017, 06:04

Есть код на Java:

@SneakyThrows
public static void main(String[] args) {
    Files.walk(Paths.get(args[0]))
        .parallel()
        .filter(Files::isRegularFile)
        .filter(item -> item.toString().endsWith(".bilog"))
        .map(path ->
            new JavaClassFile(
                path,
                new BLCodeFile(path).asBytecode()
            )
        )
        .forEach(JavaClass::save);
}
public final class JavaClassFile implements JavaClass
public interface JavaClass {
    void save();
}

Хотелось бы написать аналогичный на Scala. Сначала попробовал просто переписать, и не получается вызвать save y trait JavaClass:

def main(args: Array[String]): Unit = {
    Files.walk(Paths get args(0))
      .parallel
      .filter(Files isRegularFile _)
      .filter(_.toString endsWith ".bilog")
      .map(new JavaClassFile(_, new InsnList))
      .forEach(???)
  }
final class JavaClassFile(private val path : Path, private val code : InsnList) extends JavaClass {
  override def save(): Unit = println(path)
}
trait JavaClass {
  def save()
}

Как будет выглядеть аналогичный идиоматический код на Scala?

Answer 1

Можно полностью изменить кусок, оставив логику:

for(file <- new File(args(0)).listFiles if file.getName endsWith ".bilog") {
  if (Files.isRegularFile(file.toPath)) {
    new JavaClassFile(file.toPath, new InsnList()).save()
  }
}

А можно чуть изменить ваш код, добавив информацию по типам:

Files.walk(Paths get args(0))
  .parallel
  .filter { case x: Path => Files isRegularFile x }
  .filter { case x: Path => x.toString endsWith ".bilog"}
  .map { case x: Path => new JavaClassFile(x, new InsnList) }
  .forEach { case x: JavaClassFile => x.save() }
READ ALSO
JavaFX GoogleCalendar

JavaFX GoogleCalendar

Есть проект система управления СТОВ функционал входит распределение и планирование работ между сотрудниками и "мостами" для ремонта

209
Sugar ORM - authentification activity

Sugar ORM - authentification activity

Я делаю класс активити, в котором аутентификацияУ меня ошибка:

199
Почему Hibernate не видит .hbm.xml?

Почему Hibernate не видит .hbm.xml?

У меня объекты Task должны записываться в таблицу tasks:

321