IntSummaryStatistics的Java8编译错误

时间:2017-11-24 04:04:57

标签: java eclipse java-8 java-stream

import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.stream.Collectors;`

我在Java8中遇到了这个错误(在Eclipse Oxygen中):

List<Integer> nums = Arrays.asList(1,2,3);
IntSummaryStatistics stats2 = nums.stream().collect(Collectors.summarizingInt(x->x));`

System.out.println(stats2);// Works!

现在我没有使用stats2,而是直接将整个RHS传递给println:

System.out.println(nums.stream().collect(Collectors.summarizingInt(x->x)));// Compile Error
  

错误:方法println(char)对于PrintStream类型

是不明确的

但是,如果我添加一个toString(),它就可以工作。

System.out.println(nums.stream().collect(Collectors.summarizingInt(x->x)).toString());

所以我想知道它为什么会这样!

通常当我们将对象传递给System.out.println()时,它的toString()方法将被调用(内部)。那么为什么我需要显式调用toString()方法?

通常我们也可以将RHS替换为另一种方法,例如:

double x = Math.sqrt(5);
System.out.println(x); // works
System.out.println(Math.sqrt(5)); //RHS substitution works

理解这一点的任何帮助都会很棒。

添加了确切的代码。

package java8.examples;

import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.stream.Collectors;

public class SampleProblem {

    public static void main(String[] args) {
        List<Integer> nums = Arrays.asList(1,2,3);
        IntSummaryStatistics stats = nums.stream().collect(Collectors.summarizingInt(x->x));
        System.out.println(stats);
        System.out.println(nums.stream().collect(Collectors.summarizingInt(x->x))); //Produces compile error
    }

}

1 个答案:

答案 0 :(得分:0)

它看起来像是一个Eclipse问题。 Eclipse Oxygen有一个开放的错误警告方法中的这种模糊性。 https://bugs.eclipse.org/bugs/show_bug.cgi?id=527083

在您的情况下,一种解决方法,它将通过强制转换来解决:

System.out.println((IntSummaryStatistics)nums.stream().collect(Collectors.summarizingInt(x->x)));