我正在寻找一种简洁的方法来过滤特定索引处的列表中的项目。我的示例输入如下所示:
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);
我想在指标筛选出的项目2,4,6,8。我有一个for循环,它跳过与索引匹配的项目,但我希望可以有一种使用流的简单方法。最终结果将如下所示:
2
4
6
8
List<Double> filteredList = Arrays.asList(0.0, 1.0, 3.0, 5.0, 7.0, 9.0, 10.0);
您可以生成一个IntStream模拟原始列表的索引,然后删除列表中的索引,然后将filteredIndexes这些索引映射到列表中的相应元素(一种更好的方法是使用HashSet<Integer>for索引,因为它们是唯一的定义,以便contains进行恒定时间操作)。
IntStream
filteredIndexes
HashSet<Integer>
contains
List<Double> filteredList = IntStream.range(0, originalList.size()) .filter(i -> !filterIndexes.contains(i)) .mapToObj(originalList::get) .collect(Collectors.toList());