uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

どう書く?org課題「メソッド数の多い組み込みクラスを列挙」

どう書く?org課題「メソッド数の多い組み込みクラスを列挙」をGroovyで、かつGDKに読み替えてやってみました。今読み直すと、staticメソッドは除くのね。
[[]]
手っ取り早くGDKのメソッドを探したり検索したいときは、GDKのリファレンスを見るよりも、Groovyのソースコード群:DefaultGroovyMethods.java, DefaultGroovyStaticMethods.java, SwingGroovyMethods.java
を見るのが手っ取り早いときもあります。これ豆知識ね。DefaultGroovyMethodsは有名なので略してDGMと呼んだりします。

以下がコード。

import org.codehaus.groovy.runtime.*

counter=[:]

[DefaultGroovyMethods,
 DefaultGroovyStaticMethods,
 SwingGroovyMethods].each {
    it.methods.each {
        if (it.parameterTypes.size() != 0) {
            cls = it.parameterTypes[0]
            counter[cls]==null? counter[cls]=1 : counter[cls]++
        }
    }
}
counter.entrySet().sort { -it.value }[0..9].eachWithIndex { it, idx ->
    println "${idx+1} : $it"
}

Groovyもしくは同種のスクリプト系の言語をあまり知らない人は、最後の3行で収集した「クラス名:メソッド数」のマップをメソッド数の逆順でソートして上位十件のキー名+件数を表示するところで驚くといいよ! ここで扱ってるのはjava.util.SortedHashMapそのものだということも。