Javaで配列内のオブジェクトのn番目のインデックスを取得する方法


  1. ループを使用してインデックスを検索する方法:

    public static int findNthIndex(Object[] array, Object target, int n) {
       int count = 0;
       for (int i = 0; i < array.length; i++) {
           if (array[i].equals(target)) {
               count++;
               if (count == n) {
                   return i;
               }
           }
       }
       return -1; // インデックスが見つからなかった場合
    }

    この方法では、指定したオブジェクトが見つかるたびにカウントを増やし、指定のn番目のインデックスを見つけたらそれを返します。もし見つからなかった場合は-1を返します。

  2. Java 8以降でのストリームを使用する方法:

    import java.util.Arrays;
    public static int findNthIndex(Object[] array, Object target, int n) {
       int[] indices = IntStream.range(0, array.length)
                               .filter(i -> array[i].equals(target))
                               .toArray();
       if (n <= indices.length) {
           return indices[n - 1];
       } else {
           return -1; // インデックスが見つからなかった場合
       }
    }

    この方法では、Java 8以降のストリームを使用して、指定したオブジェクトと等しい要素のインデックスを見つけます。配列の長さを超えるn番目のインデックスが存在しない場合は-1を返します。

これらの方法は、オブジェクトの等価性(equalsメソッド)を比較することに基づいています。また、配列内のオブジェクトがnullである場合や、配列自体がnullである場合には適切な例外処理を行う必要があります。

ご参考までに、上記のコード例は一般的なケースをカバーするものであり、実際の使用に応じて適宜修正してください。