Как извлечь неизменяемое из карты(Строка, список(строка)) список с использованием функционального программирования в scala

#list #scala #dictionary #collections #functional-programming

Вопрос:

 val filesMap = [/dir/one -> {text1.txt, text2.txt, command.txt}, /dir/two -> {text1.txt, text2.txt, command.txt}, /dir/three -> {text1.txt, text2.txt}} 

val allFiles = filesMap().toList

 

Каталог, в котором command.txt находится файл, должен быть проанализирован, остальные из них будут проигнорированы. Все вышесказанное /dir/three следует игнорировать. Затем мне нужно прочитать command.txt , который содержит такие команды, как следующая Delete: 2 вставка двух самых старых файлов в список всех файлов. У меня уже есть метод для чтения command.txt файла и извлечения всех команд, и это значение для сопоставления commandMap . Например commandMap , выглядит следующим образом.

 commandMap = {Delete -> 2, Copy -> 2, Cut -> 2}
 
 // method that extract commands from commands.txt to the map
def readCommandFile(pathToCommand: String): Map[String, Int] ={
      // som logic to extract list of commands from the text file
}
 

Комментарии:

1. @Jwvh пожалуйста, дайте мне знать, если у вас есть еще какие-либо вопросы?

Ответ №1:

 
def isCommand: FileStatus => Boolean = f => /* add ur allCommandsInDatFile.contains(numberOfFiles)  */

def getIndex: FileStatus => Int = f => /* add ur Integer.parseInt(allCommandsInDatFile(numberOfFiles) */

fileMap.flatMap { 
  case (_, files) => files.find(isCommand) match { 
    case Some(file) => 
      val index = getIndex(file)
      files.takeRight(index)
    case None => files 
  } 
}

 

Решит ли это вашу проблему?

Я немного отредактировал.

Комментарии:

1. Как я могу добавить несколько параметров в, здесь содержится только состояние файла => F

2. Не могли бы вы подробнее рассказать о своем allCommandsInDatFile.contains(numberOfFiles) ? С моей точки зрения, это просто для того, чтобы проверить, keep command меньше ли 0 или больше длины списка. вы можете легко добавить эту логику в getIndex: FileStatus => Int .

3. Я сделал то же самое, что вы сказали, если(индекс != 0) файлов.takeRight(индекс) еще нет, но похоже, что логика фильтра не работает.