0

私は、Groovy コードを作成しようとしている Java プログラマーです。

loginAttributevalues というマップを反復処理し、各キー (ユーザー名など) について相互参照属性値を見つけて、これを出力します。

ジョン:表示名

しかし、Groovy 構文について Java の頭脳を理解するのに苦労しています。誰かが私を正しい方向に向けることができますか? ありがとう。

loginAttributeValues = [username: 'john', email: 'john@smith.com']

def mapXref = [username: 'display_name',
               firstname: 'first_name',
               lastname: 'last_name',
               email: 'email'}



for (String x : loginAttributeValues) {
    if (mapXref[x])
        println(mapXref.get(x))
}
4

2 に答える 2

1

これはあなたのために働くはずです:

loginAttributeValues.each {
    if (mapXref[it])
        println(mapXref.get(it))
}

Java for : each 構文は groovy では有効ではありません。eachクロージャーを使用するのが最善です。

または、本当に for ループ構文を維持したい場合は、 for を置き換えinます:

于 2013-06-21T22:02:53.690 に答える
0
loginAttributeValues = [username: 'john', email: 'john@smith.com']

def mapXref = [username: 'display_name',
               firstname: 'first_name',
               lastname: 'last_name',
               email: 'email']


def newMap = [:]
loginAttributeValues.each {k, v ->
     newMap << (k in mapXref.keySet() ? [(v): mapXref[k]] : [:])
}

assert newMap.'john' == 'display_name'
assert newMap.'john@smith.com' == 'email'

次のような地図が必要だと思います

[john:display_name, john@smith.com:email]

しかし、なぜjohnakeyおよびdisplay_nameas としての値が必要なのですかvalue。そうではないはずです。その場合、必要になります

newMap << (k in mapXref.keySet() ? [mapXref[k] : v] : [:])

これは次のように主張します

assert newMap.display_name == 'john'
assert newMap.email == 'john@smith.com'

注:-がinのサブセットを持つ
ことが保証されている場合、ロジックは以下のように最適化できます。loginAttributeValueskeyskeysmapXref

def newMap = loginAttributeValues.collectEntries{k, v ->
    [v, mapXref[k]]
}
于 2013-06-21T22:25:08.297 に答える