Java列表比较导致错误I can';别针

Java列表比较导致错误I can';别针,java,arrays,list,Java,Arrays,List,我正在编写这个脚本,以便在Java中按顺序比较列表/数组中的元素。本质上,代码接收CSV,将其转换为列表,并迭代列表大小。当我尝试比较遇到错误的值时,在这种情况下我无法理解: 线程“main”java.lang.ClassCastException中的异常:无法将类java.lang.String转换为类java.lang.Float(java.lang.String和java.lang.Float位于加载程序“引导”的模块java.base中) at list.main(list.java:2

我正在编写这个脚本,以便在Java中按顺序比较列表/数组中的元素。本质上,代码接收CSV,将其转换为列表,并迭代列表大小。当我尝试比较遇到错误的值时,在这种情况下我无法理解:

线程“main”java.lang.ClassCastException中的异常:无法将类java.lang.String转换为类java.lang.Float(java.lang.String和java.lang.Float位于加载程序“引导”的模块java.base中)
at list.main(list.java:22)

代码是:

public class list{

    public static void main(String[] args){
        System.out.println("Enter your filename");
        Scanner inputValue = new Scanner(System.in);
        String fileLocation = inputValue.nextLine();
        try {
            String checkvalue = new String(Files.readAllBytes(Paths.get(fileLocation)));
            ArrayList<Float> listValues = new ArrayList(Arrays.asList(checkvalue.split("[\\r\\n]+")));
            System.out.println(listValues);
            for (int i = 0; i < listValues.size(); i++){
                System.out.println(listValues.get(i));
                float valueA = listValues.get(i);
                float valueB = listValues.get(i+1);
                if (valueA <= valueB){
                    System.out.println("True");
                }
            }
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }
}
公共类列表{
公共静态void main(字符串[]args){
System.out.println(“输入文件名”);
扫描仪输入值=新扫描仪(System.in);
字符串fileLocation=inputValue.nextLine();
试一试{
String checkvalue=新字符串(Files.readAllBytes(path.get(fileLocation));
ArrayList listValues=新的ArrayList(Arrays.asList(checkvalue.split(“[\\r\\n]+”));
System.out.println(列表值);
对于(int i=0;iArrayList listValues=new ArrayList(Arrays.asList(checkvalue.split([\\r\\n]+”));
checkvalue.split(…)
返回一个字符串数组。因此,此表达式的右侧构建了一个
ArrayList
。不过,您已将
listValues
声明为
ArrayList
,因此它试图告诉您存在类型不匹配

要解决这个问题,您需要将字符串解析为浮点数。Java的Float类有一个很好的方法可以使用。

ArrayList listValues=new ArrayList(Arrays.asList(checkvalue.split([\\r\\n]+”));
checkvalue.split(…)
返回一个字符串数组。因此,此表达式的右侧构建了一个
ArrayList
。不过,您已将
listValues
声明为
ArrayList
,因此它试图告诉您存在类型不匹配

要解决这个问题,您需要将字符串解析为Float。Java的Float类有一个很好的方法,您可以使用。

替换这一行

ArrayList<Float> listValues = new ArrayList(Arrays.asList(checkvalue.split("[\\r\\n]+")));
更换这条线

ArrayList<Float> listValues = new ArrayList(Arrays.asList(checkvalue.split("[\\r\\n]+")));


String split返回一个字符串。因此,
listValues
实际上是一个ArrayList,但您已经声明它是一个
ArrayList
。啊,好的,这是有意义的。我来自Python,如果这澄清了错误,类型转换与这里相比非常简单。在这种情况下,我想我生成列表,然后将列表元素转换为into之后浮动?或者是否有一个文档,我可以在其中阅读如何通过此方法直接转换为浮动?
new ArrayList
实例化一个原始类型。您应该在该行上有一个警告。您想要
new ArrayList
或者只是
new ArrayList
@DanielPryden:从技术上讲是正确的,但我们之间的转换存在问题是的,我刚才也看到了。String split返回一个字符串。因此
listValues
实际上是一个ArrayList,但您已经声明它是一个
ArrayList
。啊,好的,这很有意义。如果这澄清了错误,我来自Python,类型转换非常严格t向前与此处进行比较。在这种情况下,我想我生成了列表,然后将列表元素转换为浮点数?或者是否有一个文档可以让我了解如何通过此方法直接转换为浮点数?
new ArrayList
实例化了一个原始类型。这一行应该有一个警告。您想要
new ArrayList
还是JUt
new ArrayList
@DanielPryden:从技术上讲是正确的,但列表类型之间的转换存在问题,最好在回答中加以解释。@Makoto:是的,我也看到了。
ArrayList
的创建在使用
toList
创建列表时是毫无意义的,因为列表从未被修改过。@Lii如果不创建新的ArrayList,它将无法编译。您可以使用Collectors.toCollection(ArrayList::new)收集直接收集到ArrayList@RoshanaPitigala:当你说某个东西没有编译时,说出它是什么以及它给出了什么错误消息是很有帮助的。在这种情况下,问题可能是
listValues
变量的类型必须更改为
List
。但是在posters代码中这是可以的,因为它们oesn不需要列表是
ArrayList
。当您使用
toList
创建列表时,创建
ArrayList
是毫无意义的,因为列表永远不会被修改。“@Lii如果不创建
新ArrayList
,它将无法编译。您可以使用Collector.toCollection(ArrayList::new)收集直接收集到ArrayList@RoshanaPitigala:当你说某个东西没有编译时,说出它是什么以及它给出了什么错误消息是很有帮助的。在这种情况下,问题可能是
listValues
变量的类型必须更改为
List
。但是在posters代码中这是可以的,因为它们oesn不需要列表是
ArrayList
。您需要使用
Float.parseFloat
对其进行流式处理和转换。您需要使用
Float.parseFloat
对其进行流式处理和转换。
ArrayList<Float> listValues = new ArrayList<>(
    Arrays.stream(
        checkvalue.split("[\\r\\n]+"))
            .map(Float::parseFloat).collect(Collectors.toList()
    )
);
ArrayList<Float> listValues = Arrays.stream(
        checkvalue.split("[\\r\\n]+"))
            .map(Float::parseFloat).collect(Collectors.toCollection(ArrayList::new));