我正在寻找一种简洁的方法来过滤掉列表中特定索引处的项目。我的示例输入如下所示:
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 循环可以跳过与索引匹配的项目,但我希望有一种使用流来完成它的简单方法。最终结果如下所示:
List<Double> filteredList = Arrays.asList(0.0, 1.0, 3.0, 5.0, 7.0, 9.0, 10.0);
最佳答案
您可以生成 IntStream
模仿原始列表的索引,然后删除 filteredIndexes
中的索引列表,然后将这些索引映射到列表中的相应元素(更好的方法是使用 HashSet<Integer>
作为索引,因为根据定义它们是唯一的,因此 contains
是一个常量时间操作)。
List<Double> filteredList =
IntStream.range(0, originalList.size())
.filter(i -> !filterIndexes.contains(i))
.mapToObj(originalList::get)
.collect(Collectors.toList());
关于特定索引的Java流过滤项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36294051/