2014-11-21 2 views
9

문자열 배열이 pointAddress이고 다른 배열의 문자열이 validPointTypes 인 경우 각 항목을 확인하고 싶습니다. Groovy : 문자열에 배열 요소가 있는지 확인하는 방법은 무엇입니까?

def pointAddress = ['bacnet://240101/AV:3', 'bacnet://240101/BV:9', 'bacnet://240101/AV:7', 'bacnet://240101/BALM:15'] 
def validPointTypes = ['AV', 'AI', 'AO', 'ANI', 'ANO', 'BV', 'BI', 'BO', 'BNI', 'BNO'] 

은 지금은 단지 거대한 if 문이있다.

j = pointName.size() 
for(j=j-1; j>=0;j--) { 
    if(pointAddress[j]) { 
     if(pointAddress[j].contains('AV') || pointAddress[j].contains('AI') || 
      pointAddress[j].contains('AO') || pointAddress[j].contains('ANI') || 
      pointAddress[j].contains('ANO') || pointAddress[j].contains('BV') || 
      pointAddress[j].contains('BI') || pointAddress[j].contains('BO') || 
      pointAddress[j].contains('BNI') || pointAddress[j].contains('BNO')) { 
     } else { 
      pointAddress.remove(j) 
      pointName.remove(j) 
      m++ 
     } 
    } else { 
     pointName.remove(j) 
     m++ 
    } 
} 

더 좋은 방법이 있어야할까요?

답변

30
def valid = pointAddress.findAll { a -> 
    validPointTypes.any { a.contains(it) } 
} 

는 덕분에 그것을

+0

달콤한를해야한다. 필자는'pointName' 배열에서 엔트리를 제거해야했기 때문에'if (validPointTypes.any {pointAddress [j] .contains (it)})'와 함께갔습니다. Me는이 모든 배열 대신 맵을 사용해야한다고 생각합니다. –

+0

findAll에서 결과에서 제거해야합니까? –

+0

완벽하게 작동합니다. 난 단지 해당 pointName 배열 항목을 제거해야했습니다. –

관련 문제