2016-06-13 7 views
0

私はJavaから継承した 'fields'の値に依存するGroovyスクリプトに取り組んでいます。このフィールド(および値)のリストを参照して作業するマップを作成できるようにする必要があります。私はこれを行う "グルーヴィー"の方法で苦労しています。Groovyは変数とマップする値を集計します

私は(継承)へのアクセスがあります。次のように私は(これらのリストをします「私の自己を設定する」だ

map = [ 
'dialogPartyASelection_7' : 'Denied', 
'dialogPartyBSelection_7' : 'Accepted', 
'dialogPartyASelection_6' : 'Denied', 
'dialogPartyBSelection_6' : 'Accepted', 
'dialogPartyBSelection_5' : 'Denied', 
'dialogPartyASelection_5' : 'Accepted', 
'dialogPartyBSelection_4' : 'Denied', 
'dialogPartyASelection_4' : 'Accepted', 
'dialogPartyBSelection_3' : 'Denied', 
'dialogPartyASelection_3' : 'Accepted', 
'dialogPartyBSelection_2' : 'Denied', 
'dialogPartyASelection_2' : 'Accepted', 
'dialogPartyBSelection_1' : 'Denied', 
'dialogPartyASelection_1' : 'Accepted' ] 

:私は何を取得しようとしている

dialogPartyASelection_7 = 'Denied' 
dialogPartyBSelection_7 = 'Accepted' 
dialogPartyASelection_6 = 'Denied' 
dialogPartyBSelection_6 = 'Accepted' 
dialogPartyBSelection_5 = 'Denied' 
dialogPartyASelection_5 = 'Accepted' 
dialogPartyBSelection_4 = 'Denied' 
dialogPartyASelection_4 = 'Accepted' 
dialogPartyBSelection_3 = 'Denied' 
dialogPartyASelection_3 = 'Accepted' 
dialogPartyBSelection_2 = 'Denied' 
dialogPartyASelection_2 = 'Accepted' 
dialogPartyBSelection_1 = 'Denied' 
dialogPartyASelection_1 = 'Accepted' 

をスクリプト全体で再利用してください)

def selectionsPartyA = [], selectionsPartyB = [], selections = [], PostSelections = [], PostChildrenSelections = [], 

PostSelections = [ 
        '7', 
        '6', 
        '5', 
        '4', 
        '3', 
        '2', 
        '1' 
       ]     

// selectionsPartyA 
for (post in PostSelections) { 
    selectionsPartyA += "dialogPartyASelection_"+post 
    } 

// selectionsPartyB 
for (post in PostSelections) { 
    selectionsPartyB += "dialogPartyBSelection_"+post 
    } 
selections.addAll(selectionsPartyB) 
selections.addAll(selectionsPartyA) 

私が持っている参照リストを使って反復しようとしましたが、参照できませんでした'フィールド'または '値'

+0

が見えます:** getProperty(name) ' – Steinar

+0

マップを作成しますか(**取得しようとしているもの:**)インスタンスから?(インスタンスにdialogParty [AまたはB] Selection_X?) – koji

+0

インスタンスフィールドから名前と値を含むマップを作成しようとしています。 @Steinarありがとう!これは役に立ちます - これを効率的に行うことにパターンがあると本当に私が学ぶのを助けるでしょう:) – lolno

答えて

2

このような? Steinarの提案@私は以下のようにこれを行うことができたと

class Test { 
    String dialogPartyASelection_7 = 'Denied' 
    String dialogPartyBSelection_7 = 'Accepted' 
    String dialogPartyASelection_6 = 'Denied' 
    String dialogPartyBSelection_6 = 'Accepted' 
    String dialogPartyBSelection_5 = 'Denied' 
    String dialogPartyASelection_5 = 'Accepted' 
    String dialogPartyBSelection_4 = 'Denied' 
    String dialogPartyASelection_4 = 'Accepted' 
    String dialogPartyBSelection_3 = 'Denied' 
    String dialogPartyASelection_3 = 'Accepted' 
    String dialogPartyBSelection_2 = 'Denied' 
    String dialogPartyASelection_2 = 'Accepted' 
    String dialogPartyBSelection_1 = 'Denied' 
    String dialogPartyASelection_1 = 'Accepted' 
} 

def obj = new Test() 
def propMap = obj.properties as Map 
assert propMap['dialogPartyASelection_5'] == 'Accepted' 
+0

変数として情報にアクセスできます(dialogPartyASelection_7 = '拒否')私は動的に作成する必要があります値は地図とは異なるので、値を含む地図から始めることはできません。 – lolno

+1

@kojiとは何ですか? groovyオブジェクトの 'properties'属性を使用して、親のJavaオブジェクトに存在するすべての属性を参照し、それをMapに強制することを提案しようとしていました。 – mnd

0

は、あなたの助けをありがとう:あなただけの代わりに値を取得しようと、プロパティ名のリストを構築しているよう

def selectionsPartyA = [], selectionsPartyB = [], selections = [], PostChildrenSelections = [], 

PostSelections = ['7','6','5','4','3','2','1']     

// selections 
for (post in PostSelections) { 
    selectionsPartyA += "dialogPartyASelection_"+post 
    selectionsPartyB += "dialogPartyBSelection_"+post 
    } 
selections.addAll(selectionsPartyB) 
selections.addAll(selectionsPartyA) 

dialogPartyASelection_7 = 'Denied' 
dialogPartyBSelection_7 = 'Accepted' 
dialogPartyASelection_6 = 'Denied' 
dialogPartyBSelection_6 = 'Accepted' 
dialogPartyBSelection_5 = 'Denied' 
dialogPartyASelection_5 = 'Accepted' 
dialogPartyBSelection_4 = 'Denied' 
dialogPartyASelection_4 = 'Accepted' 
dialogPartyBSelection_3 = 'Denied' 
dialogPartyASelection_3 = 'Accepted' 
dialogPartyBSelection_2 = 'Denied' 
dialogPartyASelection_2 = 'Accepted' 
dialogPartyBSelection_1 = 'Denied' 
dialogPartyASelection_1 = 'Accepted' 

test = [:] 
for (entry in selections){ 
test.put(entry, getProperty(entry)) 
} 
assert test == [dialogPartyBSelection_7:Accepted, dialogPartyBSelection_6:Accepted, dialogPartyBSelection_5:Denied, dialogPartyBSelection_4:Denied, dialogPartyBSelection_3:Denied, dialogPartyBSelection_2:Denied, dialogPartyBSelection_1:Denied, dialogPartyASelection_7:Denied, dialogPartyASelection_6:Denied, dialogPartyASelection_5:Accepted, dialogPartyASelection_4:Accepted, dialogPartyASelection_3:Accepted, dialogPartyASelection_2:Accepted, dialogPartyASelection_1:Accepted] 
+1

あなたの最初のfor-loopは 'collectMany'に置き換えられ、2つ目は' collectEntries'で置き換えられます。まもなくまたは後でgroovyパーサーがそれらをクラスと混同するので、大文字のvarsも使用しないでください。 – cfrick

関連する問題