java - 尝试构建一维数组时,推理变量具有不兼容的边界

标签 java arrays java-8 java-stream

我已经查看了“可能相关”的问题,但它们似乎没有帮助;我也是一个初学者,尤其是 Java8,所以请耐心等待!

问题 - 我想将包含值列表(在本例中为双数字)的文件读入数组。我将这些作为帮助程序类中的方法来执行,因为我预计需要在我的项目中多次执行此操作。

我已经创建了一个简单的方法将文件转换为二维 double 组 -

public static double[][] Double2DMatrixFromFile(String input) throws IOException 
    {

        Path path = Paths.get(input);
        return Files.lines(path)
                .map((x) -> Stream.of(x).mapToDouble(Double::parseDouble).toArray())
                .toArray(double[][]::new);

    }

这很有效,而且我已经成功使用了它。然后我想尝试将包含一长串大数字的文件读取到一维数组中,因此尝试快速修改上面的方法,使其看起来像这样 -

public static double[] DoubleArrayFromFile(String input) throws IOException
    {
        Path path = Paths.get(input);
        return Files.lines(path)
                .map((y) -> Stream.of(y).mapToDouble(Double::parseDouble).toArray())
                .toArray(double[]::new);
    }

但是这拒绝编译,我不清楚为什么。确切的错误是

Error:(57, 17) java: method toArray in interface java.util.stream.Stream cannot be applied to given types;
required: java.util.function.IntFunction found: double[]::new
reason: inference variable A has incompatible bounds equality constraints: double upper bounds: java.lang.Object

鉴于它在第一种情况下有效,我不清楚不兼容性出现在哪里。

如果这看起来很明显,我深表歉意,但我对编码非常陌生。

最佳答案

您的第一个方法以 Stream<String> 开头,将其映射到 Stream<double[]>然后将其转换为二维数组 ( double[][] )。

您的第二种方法尝试转换 Stream<double[]>为一维数组。 toArray只能转换Stream<SomeType>SomeType[] 。因此,如果SomeType已经是一个一维数组,toArray只能产生二维数组。

由于您的第二种方法应该创建一个一维数组,因此您应该映射 Stream<String>DoubleStream然后转换为一维数组:

public static double[] DoubleArrayFromFile(String input) throws IOException
{
    Path path = Paths.get(input);
    return Files.lines(path)
                .mapToDouble(Double::parseDouble)
                .toArray();
}

顺便说一句,第一种方法也可以简化。没有理由创建 Stream仅将单个元素转换为单个 double 组。你可以写:

public static double[][] Double2DMatrixFromFile(String input) throws IOException 
{

    Path path = Paths.get(input);
    return Files.lines(path)
                .map(x -> new double[]{Double.parseDouble(x)})
                .toArray(double[][]::new);

}

关于java - 尝试构建一维数组时,推理变量具有不兼容的边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51874855/

相关文章:

java 8 在使用 Collectors.toMap 时处理自定义异常

Java 流 : combine elements in a map

java - 元素 "beans"的前缀 "beans:beans"未绑定(bind)

java - Spark 作业与 Google Dataproc 不兼容

php - 在 mysqli 准备语句中循环时

php - 当我尝试测试对基于 PHP 的服务器的请求时,我应该使用 Java 或 Python 中的哪种数据结构,该服务器需要带有字符串索引的数组?

java - Java 8 中是否有等效于 Scala 的 Either?

java - 如何使用 apache 事件用户模型跳过 xlsm 文件中的行

java - 重定向后 Servlet 名称仍在 Url 中(使用多页的 jQuery)

javascript - Javascript Maps 是否有一定数量的可以设置的键,或者它们是否有一定数量的可以完成的键操作?