2016-07-23 5 views
0

以下のような2つの文字列リストがあり、startsWith論理に基づいて新しい文字列リストを作成するにはどうしたらいいですか?2つのリストをフィルタリングして新しいリストを作成する方法

pathList = ["/etc/passwd/something.txt", 
      "/etc/fonts/fonts.conf" 
      "/var/www/foo.bar", 
      "/some/foo/path/one.txt"] 
notAllowedPathList = ["/etc/fonts", 
         "/var", 
         "/path"] 

newList = ["/etc/passwd/something.txt", "/some/foo/path/one.txt"] 

newListnewListpathListstartsWith各要素の各要素かどうかを見ることによって作成されます。彼らはそれぞれ/etc/fonts/varをstartWithため、上記のpathList/etc/fonts/fonts.conf/var/www/foo.barからそう

は、削除されます。

私は以下を思い付いたが、私はこれを行うための、よりグルーヴィーな方法があるだろうと信じて:

def newList = [] 
    pathList.each {String fileName -> 
     notAllowedPathList.find { String notAllowed -> 
      if (fileName.startsWith(notAllowed)) { 
       return true 
      } 
      else { 
       newList << fileName 
      } 
     } 
    } 

答えて

0
def pathList = [ 
    "/etc/passwd/something.txt", 
    "/etc/fonts/fonts.conf", 
    "/var/www/foo.bar", 
    "/some/foo/path/one.txt" 
] 

def notAllowedPathList = ["/etc/fonts", "/var", "/path"] 

def newList = pathList.findAll { String fileName -> 
    !notAllowedPathList.any { 
     fileName.startsWith(it) 
    } 
} 
+0

うわー、私は '知りませんでした' any' 'の前に付加することができます!。あなたはそれが何をしているか説明していただけますか? – Anthony

+0

'any'は、呼び出されたコレクションのいずれかの要素がクロージャ引数に渡されたときに真理値を返す場合にtrueを返します –

関連する問題