Hatena::Groupprogram

ひとり開発日記。 このページをアンテナに追加 RSSフィード

2010/09/13 (Mon)

1~nまでの整数を配列にして返すメソッドはどう書けばいいのでしょうか?

| 1~nまでの整数を配列にして返すメソッドはどう書けばいいのでしょうか? - ひとり開発日記。 を含むブックマーク はてなブックマーク - 1~nまでの整数を配列にして返すメソッドはどう書けばいいのでしょうか? - ひとり開発日記。

public class NumberUtils {

    private NumberUtils() {}

    /**
     * 1~maxまでの整数が入った配列を返します
     *
     * @param max 最大値
     * @return 1~maxまでの整数が入った配列
     */
    public static int[] createArray(int max) {
        // ...?
    }
}

教科書通りの書き方だと、こんなでしょうか。

    public static int[] createArray(int max) {
        int[] result = new int[max];
        for (int i = 1; i <= max; i++) {
            result[i - 1] = i;
        }
        return result;
    }

“1~n”って辺りが引っ掛けっぽいですけど(配列の添え字は0からなので)。 ただ、1~nの連続数を返すだけなのに、これだけの手続きを書かなきゃいけない、ってのは如何にもJavaですよねー。

で、私ならこう書きます。

    public static int[] createArray(int max) {
        return new IntRange(1, max).toArray();
    }

まぁ、大抵のプロジェクトにはCommons-Lang入ってるでしょうから、IntRange使ってサクっと。

で、もう一丁、これを配列でなくて、Collectionで返したい時。

    public static Collection<Integer> createCollection(int max) {
        return Arrays.asList(ArrayUtils.toObject(new IntRange(1, max).toArray()));
    }

ArrayUtils使って、int[]→Integer[]に変換する一手間必要なのですけど、これGoogle Guava使うと、もうちょっと短く書けます。

    public static Collection<Integer> createCollection(int max) {
        return Ints.asList(new IntRange(1, max).toArray());
    }

っていうか、Guavaの日本語情報少な過ぎで…。

トラックバック - http://program.g.hatena.ne.jp/halflite/20100913