Java列表比较导致错误我无法确定

标签 java arrays list

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

Exception in thread "main" java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Float (java.lang.String and java.lang.Float are in module java.base of loader 'bootstrap')
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();
        }
    }
}

最佳答案

替换此行

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

这样:

ArrayList<Float> listValues = new ArrayList<>(
    Arrays.stream(
        checkvalue.split("[\\r\\n]+"))
            .map(Float::parseFloat).collect(Collectors.toList()
    )
);

你有两个主要错误

  • new ArrayList创建一个原始类型。 And you should not use raw types 。这就是为什么我添加了 <> .
  • Arrays.asList(checkvalue.split("[\\r\\n]+"))创建 List<String> ,无法转换为 ArrayList<Float> 。这就是为什么我将所有内容映射到 String[] 中。与 Float::parseFloat .

或者更简单地说,正如littleLouito所建议的,

ArrayList<Float> listValues = Arrays.stream(
        checkvalue.split("[\\r\\n]+"))
            .map(Float::parseFloat).collect(Collectors.toCollection(ArrayList::new));

关于Java列表比较导致错误我无法确定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53178117/

相关文章:

arrays - 如何在 matlab 中连接数组 'n' 时间?

java - 如何修复 'Concurrent writes on cassandra lists issue when data in the lists is getting mixed' ..?

java - JAVA继承中的重写与重载

Java结构能够确定并发更新的有序集中小于x的元素的大致数量

java - 如何获取 Java BlockingQueue 的空属性,以便将其绑定(bind)到 JavaFX 元素的某些属性?

java - Android微调器的选定文本对齐方式

javascript - 使用命令的数组

ruby-on-rails - 如何访问 ruby​​ 对象内数组内的哈希?

list - 返回和的 Lisp 函数

Python 从列表中选择一个文件