特定索引的Java流过滤项目

标签 java java-8 java-stream

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

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);

最佳答案

您可以生成 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/

相关文章:

java - 在 IBM Message Broker v8 中使用 docx4j 时出现 NoClassDefFoundError

java - 如何使用 javafx packager 签署 MSI?

java - 网络应用通讯

java - 访问 Java 8 Lambda 表达式中的字段

java - 成对操作给定的 Java 流

Java 8 Streams 多重分组依据

Java:用快照保存文件

java - 检查forEach lambda循环Java 8中List的范围

java - 了解 CompletableFuture::runAsync

java - 为什么有人会在 java 1.8 的接口(interface)中定义静态方法?