当前位置: 首页 > 知识库问答 >
问题:

尝试构建1D数组时,推理变量的边界不兼容

葛阳
2023-03-14

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

问题是,我想将一个包含值列表的文件(在本例中是双数字)读入一个数组。我在助手类中作为方法来做这些,因为我希望在我的项目中需要多次这样做。

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

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);

    }

这很有效,我一直在成功地使用它。然后我想尝试将一个包含一长串大数字的文件读入一个1D数组,所以尝试快速修改上面的方法,使其看起来像这样-

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);
    }

然而,这拒绝编译,我不清楚为什么。准确的错误是

错误:(57,17)java:接口java中的toArray方法。util。流动流不能应用于给定的类型
必填项:java。util。作用找到的IntFunction:double[]::new
原因:推理变量A具有不兼容的边界等式约束:双上限:java。lang.反对

我不清楚不兼容是从哪里产生的,因为它在第一种情况下是有效的。

很抱歉,如果这看起来很明显,但是我对编码很陌生。

共有1个答案

楚俊逸
2023-03-14

第一个方法以流开始

您的第二个方法尝试转换Stream

由于您的第二个方法应该创建一个一维数组,您应该映射Stream

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

BTW,第一方法也可以被简化。没有理由创建单个元素的Stream,只是将其转换为单个双重数组。你可以写:

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);

}

 类似资料:
  • 错误:(65,52)java:不兼容类型:推理变量U的边界不兼容等式约束:akka。http。javadsl。模型HttpResponse下限:com。我的演员。聊天演员。聊天信息 下面这行代码显示了错误: 这里是HttpResponse是Akka Http的。 我不知道它在说什么。解决它的方法应该是什么?

  • JDK 1.8 设置和收集。 我想数一数那个十字路口 我试试这个: 但我有一个错误:

  • 我有以下代码 出于某种原因,它抛出了以下编译错误 Solution.java:11:错误:不兼容类型:推断变量T具有不兼容的边界List=Arrays.asList(A);^相等约束:整数下界:int[]其中T是类型变量:T扩展方法中声明的Object asList(T...) 我假设这是一个Java8功能但我不知道如何解决这个错误

  • 任务是: 修改所有以字母表后半部分字母开头的工人的奖金。 我有这个错误 原因:推理变量T具有不兼容的边界 相等约束:RegWorker 下界:Float

  • 以下程序在Java7和Eclipse Mars RC2中编译Java8: 使用javac 1.8.0_45编译器,报告了以下编译错误: 解决方法是在本地分配一个变量: 我知道类型推断在Java8中发生了很大变化(例如,由于JEP 101“广义目标类型推断”)。那么,这是一个错误还是一个新的语言“功能”? 编辑:我也向Oracle报告了JI-9021550,但以防万一这是Java8中的一个“功能”,

  • 正如斯图尔特·马克斯(Stuart Marks)指出的那样,我试图为这里所述的问题编写一个解决方案,以使用一个helper类。由于这个错误,我被代码卡住了: 我当前的代码: 我本人对Java 8很陌生,解决方案可能是错误的,但我不知道错误是什么意思,也不知道如何解决它。元组类过去也是泛型的,但因为我认为这导致了问题,我删除了泛型类型,但仍然存在相同的错误。