2016-08-05 17 views
0

私はいくつかのURLを持っているリストを持っています。私はマップ上でリスト内の項目がどこに存在するかを見つけるために地図を繰り返しています。値が存在する場合、対応するマップキーが返されます。ここで groovyのマップの値と比較してキーを見つける方法は?

はコードです:

def map= [:] 
List<String> list = ["url1", "url2", "url3"] 
for (project in activeJobs) { 

    scm = project.scm; 
    //println("${project.name}: " + 
     //  "repositories: ${scm.repositories.collectMany{ it.getURIs() }}") 
    def uriName = scm.repositories.collectMany{ it.getURIs() } 
    uriName.eachWithIndex { item, index -> 
     //println item 
     uriName = uriName[index].toString().toLowerCase() 
     map.put(project.name, uriName) 
    } 

} 
list.each { url -> 

    //println url 
    //def item = map.find { value -> url } 
    //println item 
    //println url 
    print map.find { it.value == url }?.key 

} 

最終print文は常にnullを返します。

+0

問題でありますが、「印刷map.find {it.value == "$ URLを"}試すことができます?.key "this once .. –

答えて

0

私はちょうど次のJUnitテストの実行:

@Test 
void testit(){ 
    def map = ["k1" : "url1", "k2" : "url2", "k3" : "url3"] 
    def list = ["url1", "url2", "url3"] 
    list.each { url -> 
    print map.find { it.value == url }?.key 

    } 
} 

をそして、出力された:「それはまだ動作しない場合

k1k2k3 

あなたはあなたのコードの多くを投稿することができますが、私はドンあなたの問題はここにあると思う。 MapfindResultsを使用して

サム

+0

全体のコードを追加 –

+0

私はあなたが持っていると確信していますが、マップの内容全体を印刷してそこにあるものを見ることができますか? – saml

+0

ええ、infact getClass()。nameはキーと値のペアのために常にjava.lang.Stringを与えます –

1

List<String> list = ["url1", "url2", "url3"] 
Map<String, String> map = [a: "url1", b: "url2", c: "url5", d: "url3"] 

assert map.findResults { k, v -> v in list ? k : null } == ['a', 'b', 'd'] 
0
uriName = uriName[index].toString().toLowerCase() 

がここ

関連する問題