当前位置: 首页 > 面试题库 >

Java Stream Collectors.toList()不会编译

爱乐邦
2023-03-14
问题内容

谁能解释为什么下面的代码不能编译,而第二个代码可以编译?

不编译

private void doNotCompile() {

    List<Integer> out;
    out = IntStream
            .range(1, 10)
            .filter(e -> e % 2 == 0)
            .map(e -> Integer.valueOf(2 * e))
            .collect(Collectors.toList());

    System.out.println(out);
}

收集 线上的编译错误

  • IntStream类型的方法collect(Supplier,ObjIntConsumer,BiConsumer)不适用于参数(Collector>)
  • 类型不匹配:无法从收集器>转换为供应商

编译

private void compiles() {
    List<Integer> in;

    in = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
    List<Integer> out;
    out = in.stream()
            .filter(e -> e % 2 == 0)
            .map(e -> 2 * e)
            .collect(Collectors.toList());

    System.out.println(out);
}

问题答案:

IntStream没有collect接受的方法Collector。如果您想要List<Integer>,则必须将装箱IntStreamStream<Integer>

out = IntStream
        .range(1, 10)
        .filter(e -> e % 2 == 0)
        .map(e -> 2 * e)
        .boxed()
        .collect(Collectors.toList());

的替代方法.map().boxed()mapToObj()

out = IntStream
        .range(1, 10)
        .filter(e -> e % 2 == 0)
        .mapToObj(e -> 2 * e)
        .collect(Collectors.toList ());

或者您可以使用以下IntStream collect方法:

out = IntStream
        .range(1, 10)
        .filter(e -> e % 2 == 0)
        .map(e -> 2 * e)
        .collect(ArrayList<Integer>::new, ArrayList::add, ArrayList::addAll);


 类似资料:
  • 尝试运行apachesparks示例代码之一(https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/graphx/AggregateMessagesExample.scala)我得到以下编译错误 但从方法上看,这似乎是正确的。不确定这里出了什么问题。

  • 问题内容: 我创建了自己的build.xml,其中包含: 效果很好。当我调用ant run时,它会编译并运行我的应用程序,但是我的应用程序带有图标包,并且不会移动到“ build”文件夹,因此我的应用程序以无法找到我的图标的异常结束。当我自己移动它们时,它将起作用。 我尝试使用 它可以工作,但是我想不使用copy命令。javac是否有任何参数?或者是其他东西? 谢谢你的答案。 问题答案: 抱歉,您

  • 所以我无法编译这段代码。我正在用一本过时的书来学习,到目前为止,大多数东西都很有效。我只遇到了几个通过谷歌搜索很容易解决的障碍,但我想这一个要复杂一些。下面是引发错误的两段代码。 在ckl.calculatorKeypadListener的两个实例中,我都收到一个错误,说找不到符号。这是我唯一收到的两个错误,我相信这是由于Java的更新。有人能帮助我做错了什么吗?如果可能的话,我不想重写整个东西,

  • 我已经在OS X 10.9.5中安装了圣杯。我运行“圣杯创建应用程序埃尔舒克”。然后我运行“圣杯运行应用程序”,在创建的目录中...但在这里冻结: Lorien:elshuck hernanezequielmartinez$ sudo grails run-app 密码: :compileJava最新 :compileGroovy是最新的 :处理资源 :类别 :findMainClass :引导运

  • 问题内容: 遇到一个错误地使用 而不是 在其代码中的人,它没有显示为编译错误。 是因为 是相同的 ? 问题答案: 没有编译错误,因为它是有效的(尽管相当无用) 一元运算符 ,其使用方式与以下方式相同: Java语言规范中的相关部分是Unary Plus运算符+(第15.15.3节) 。它指定调用一元运算会导致操作数的一元数值提升(第5.6.1节)。这意味着: * 如果操作数是编译时类型的,,,或,

  • 我正在使用Buildozer将一个python文件转换为android APK(使用Kivy),它完成了相当长的过程,但随后出现了错误。 你知道最后是什么导致了这个错误吗? 需求=kivy,Python3CrystAx==3.6 我也试过 需求=kivy,python3crystax 任何帮助都将不胜感激!谢了。