2016-04-28 9 views
1

すべてのClassNodeフィールドを特定の条件で取得したいと考えています。 は私のコードでは、次のようになります。コード内の `grep`機能を簡略化する

listener.classNode.fields.grep { 
    !it.name.startsWith('$') && 
    !it.name.startsWith('_') && 
    !it.name.equals('metaClass') && 
    !it.name.startsWith('this') 
}.collect{ it.name } 

はそれを改善する方法はありますか?私はgrepブロック内のそれらのいくつかの条件文を取り除くことを意味しますか?

assert ['$a', '_a', 'metaClass', 'this', 'FOUND'].grep { n -> 
    !['$', '_', 'this'].any { a -> n.startsWith(a) } && 
    !n.equals('metaClass') 
} == ['FOUND'] 

覚えている:それは条件自体に来るとき

listener.classNode.fields*.name.grep { 
    !it.startsWith('$') && 
    !it.startsWith('_') && 
    !it.equals('metaClass') && 
    !it.startsWith('this') 
} 

が、これは少し短くなることがあります。

答えて

2

あなたは少し早いname値を取得して、それが少し短くすることができます後者は、たとえそれがより面白いものであっても、人間によって読みにくくなる可能性があります。これらは主にコードで作業する人間です)

+0

私は理解できる唯一のコードを目指しています。 ilityは私を気にしない。 – lapots