Javaのstreamで対象値のインデックスを取得する

JavaのStream APIは、インデックスに基づいた操作を直接サポートしていません。しかし、IntStreammapToObjを組み合わせることで、インデックスを取得することが可能です。

以下に、リストから特定の値のインデックスを取得する例を示します。

List<String> list = Arrays.asList("a", "b", "c", "d", "e");
String target = "c";

OptionalInt indexOpt = IntStream.range(0, list.size())
    .filter(i -> target.equals(list.get(i)))
    .findFirst();

if (indexOpt.isPresent()) {
    System.out.println("Index of " + target + " is: " + indexOpt.getAsInt());
} else {
    System.out.println(target + " is not in the list.");
}

このコードは、IntStream.rangeを使用してリストのインデックスに対応するストリームを作成し、フィルタを適用して目的の値のインデックスを探しています。findFirstは最初に見つかったインデックスを返します。

ただし、この方法はリストが大きい場合には効率が良くないため、パフォーマンスが重要な場合は他の方法を検討したほうが良いかもしれません。

タイトルとURLをコピーしました