在Java 8 Stream中,没有直接获取符合条件的数据所在的索引的方法。但是,你可以使用IntStream.range()方法来创建一个索引流,然后使用filter()方法过滤出符合条件的索引,最后通过mapToObj()方法将索引映射回原始数据。下面是一个例子:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        numbers.add(5);

        List<Integer> filteredIndexes = IntStream.range(0, numbers.size())
                .filter(i -> numbers.get(i) > 2)
                .mapToObj(i -> i)
                .toList();

        System.out.println(filteredIndexes); // 输出 [2, 3, 4]
    }
}

在上述代码中,我们首先使用IntStream.range()方法创建了一个从0到numbers.size()的索引流。然后,我们使用filter()方法过滤出满足条件的索引,即对应的元素大于2. 最后,我们使用mapToObj()方法将索引映射回原始数据,并将结果收集到列表中。

请注意,toList()方法是Java 16中的新特性,如果你使用的是Java 8,可以使用Collectors.toList()来代替


原文地址: https://www.cveoy.top/t/topic/id5r 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录