输入java8流的推断

时间:2018-04-27 03:08:24

标签: java java-stream

我是第一次尝试java8流,并且在语法类型推断方面有点皱纹。这是片段:

它的核心是:

Arrays.stream(stringArray).mapToInt(Integer::parseInt).collect(Collectors.toList()));

这导致:

Error:(56, 84) java: method collect in interface java.util.stream.IntStream cannot be applied to given types;
  required: java.util.function.Supplier<R>,java.util.function.ObjIntConsumer<R>,java.util.function.BiConsumer<R,R>
  found: java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.List<java.lang.Object>>
  reason: cannot infer type-variable(s) R
    (actual and formal argument lists differ in length)

这是一个更完整的代码段:

try {
    br =  new BufferedReader(new FileReader(inputFile));
} catch (FileNotFoundException e) {
    e.printStackTrace();
}
String line = null;
while ((line = br.readLine()) != null) {
  list.add(Arrays.stream(line.split(","))
  .mapToInt(Integer::parseInt).collect(Collectors.toList()));
}

我尝试了一些类似的方法/调整但尚未突破。提示赞赏。

1 个答案:

答案 0 :(得分:3)

这根本不是类型推断,而是<div id="mobileNavBar"> <div style="width:20%;"> <span class="menu-trigger"><i class="fas fa-bars menuFA fa-2x">first div</i></span> </div> <div style="width:80%"> second div </div> </div> 没有接受IntStream的重载collect方法。相反,您可以致电Collector将其映射到IntStream#boxed,然后将其收集到Stream<Integer>

List<Integer>

更简单的解决方案是将其直接映射到Arrays.stream(stringArray) .mapToInt(Integer::parseInt) .boxed() .collect(Collectors.toList());

Stream<Integer>