2014-11-21 19 views
9

Tôi có một chuỗi các chuỗi pointAddress và tôi muốn kiểm tra từng mục nhập nếu nó chứa chuỗi từ một mảng khác, validPointTypes.Groovy: Làm cách nào để kiểm tra xem chuỗi có chứa bất kỳ phần tử nào của mảng không?

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'] 

Hiện tại tôi chỉ có một tuyên bố khổng lồ 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++ 
    } 
} 

Có cách nào tốt hơn, đúng không?

Trả lời

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

nên làm điều đó

+0

ngọt, cảm ơn. Tôi đã đi với 'if (validPointTypes.any {pointAddress [j] .contains (it)})' vì tôi cũng đã phải loại bỏ các mục từ mảng 'pointName'. Tôi nghĩ rằng tôi cần phải sử dụng một bản đồ thay vì tất cả các mảng này. –

+0

findAll sẽ xóa chúng khỏi kết quả cho bạn? –

+0

Nó hoạt động hoàn hảo! Tôi chỉ cần loại bỏ mục nhập mảng pointName tương ứng. –

Các vấn đề liên quan