java - 具有相同值的项目列表

标签 java list

我正在从一个文件中创建一个项目列表

BufferedReader reader = new BufferedReader(
    new InputStreamReader(new FileInputStream("H:/temp/data.csv")));
try {
    List<Item> items = new ArrayList<Item>();
    Item item = new Item();

    String line = null;
    while ((line = reader.readLine()) != null) {
        String[] split = line.split(",");

        item.name = split[0];
        item.quantity = Integer.valueOf(split[1]);
        item.price = Double.valueOf(split[2]);
        item.total = item.quantity * item.price;

        items.add(item);
    }

    for (Item item2 : items) {
        System.out.println("Item: " + item2.name);
    }
} catch (IOException e) {
    reader.close();

    e.printStackTrace();
}

问题是列表将文件中的最后一行显示为所有项目的值。

最佳答案

您的代码的问题是您只创建了一个 Item Object(Item item = new Item) 实例,并且同一实例一次又一次地添加到列表中。

您需要为文件中的每一行创建一个新的 Item 实例,并将其添加到列表中,如下所示。

修复:

List<Item> items = new ArrayList<Item>();

String line = null;
while ((line = reader.readLine()) != null) {
    String[] split = line.split(",");

    Item item = new Item(); // New Item is created for every line
    item.name = split[0];
    item.quantity = Integer.valueOf(split[1]);
    item.price = Double.valueOf(split[2]);
    item.total = item.quantity * item.price;

    items.add(item);
}

关于java - 具有相同值的项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4574218/

相关文章:

java - 使用 Caigen CSV 阅读器查询带有左引号和右引号的字符串值

java - 使用 JFLEX 从 eof 访问命令行参数

c - C 中的链表插入

android - 如何将我的 Android 应用程序添加到共享对话框?

c++ - 将 std::list 扩展为循环列表

python - 选择Python列表中的一些元素

java - 调整 CloudBees 应用程序的 JVM 参数

java - 尝试使用列表中随机值中的字符串时无法找到符号错误

java - "Exception in thread "主要 "java.lang.StackOverflowError"

Python 文本文件中的重复单词