java - 如何将整数流过滤到列表中?

标签 java java-8 java-stream

我正在尝试处理 Integers 流并将与谓词匹配的整数(通过 compare() 函数)收集到列表中。这是我编写的代码的粗略概要。

private List<Integer> process() {
    Z z = f(-1);
    return IntStream.range(0, 10)
        .filter(i -> compare(z, f(i)))
        .collect(Collectors.toCollection(ArrayList::new)); // Error on this line
}

private boolean compare(Z z1, Z z2) { ... }
private Z f(int i) { ... }

不幸的是,我的解决方案没有编译,我无法理解突出显示的行的编译器错误:

The method collect(Supplier<R>, ObjIntConsumer<R>, BiConsumer<R,R>) in the type IntStream is not applicable for the arguments (Collector<Object,capture#1-of ?,Collection<Object>>)

有什么建议吗?

最佳答案

IntStream不包含 collect接受类型为 Collector 的单个参数的方法. Stream做。因此你必须转换你的 IntStreamStream对象。

您可以将 IntStream 装箱进入Stream<Integer>或使用 mapToObj实现相同的目标。

例如:

return IntStream.range(0, 10)
    .filter(i -> compare(z, f(i)))
    .boxed()
    .collect(Collectors.toCollection(ArrayList::new));

boxed()将返回一个由该流的元素组成的 Stream,每个元素装箱为一个 Integer。

return IntStream.range(0, 10)
    .filter(i -> compare(z, f(i)))
    .mapToObj(Integer::valueOf)
    .collect(Collectors.toCollection(ArrayList::new));

关于java - 如何将整数流过滤到列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44994593/

相关文章:

java-8 - 从 map 创建 map

java - 终端操作(例如 forEach)是否可以重新抛出已检查的异常?

java - 什么版本的 SpringRouteBuilder 有 log 和 onException 成员?

java.text.ParseException : Unparseable date: "01-02-2014" 异常

Java 8 迭代列表内的列表和stream.map()

java - 你能在运行时检查 Java 8 lambda 的字节码吗?

java - 在 forEach 循环之外使用变量

java - IntStream Java 出现次数

java - Assets 文件目录给出 java.io.FileNotFoundException eclipse

java - 在hibernate查询中获取数据库名称