小编典典

特定索引的Java流过滤器项

java

我正在寻找一种简洁的方法来过滤特定索引处的列表中的项目。我的示例输入如下所示:

List<Double> originalList = Arrays.asList(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0);
List<Integer> filterIndexes = Arrays.asList(2, 4, 6, 8);

我想在指标筛选出的项目2468。我有一个for循环,它跳过与索引匹配的项目,但我希望可以有一种使用流的简单方法。最终结果将如下所示:

List<Double> filteredList = Arrays.asList(0.0, 1.0, 3.0, 5.0, 7.0, 9.0, 10.0);

阅读 151

收藏
2020-11-01

共1个答案

小编典典

您可以生成一个IntStream模拟原始列表的索引,然后删除列表中的索引,然后将filteredIndexes这些索引映射到列表中的相应元素(一种更好的方法是使用HashSet<Integer>for索引,因为它们是唯一的定义,以便contains进行恒定时间操作)。

List<Double> filteredList = 
    IntStream.range(0, originalList.size())
             .filter(i -> !filterIndexes.contains(i))
             .mapToObj(originalList::get)
             .collect(Collectors.toList());
2020-11-01