【问题标题】:Adding element to List from csv file like Arraylist.add从 csv 文件(如 Arraylist.add)向列表添加元素
【发布时间】:2021-01-07 07:13:31
【问题描述】:

这是我的代码:

public static Map<String, List<Customer>> readCustomerData() throws IOException {
    
    Map<String, List<Customer>> customers =
    Files.lines(Paths.get("customer.csv"))
            .map(line -> line.split("\\s*,\\s*"))
            .map(field -> new Customer(
                    Integer.parseInt(field[0]), field[1],
                    Integer.parseInt(field[2]), field[3]))
            .collect(Collectors
                    .groupingBy(Customer::getName));
    System.out.println (customers);
    
    return customers;
}

我注意到这段代码将我在 csv 文件中的数据读取到一个元素中,如下所示:

(Ali = ["1 Ali 1201345673 Normal"] , Siti = ["2 Siti 1307891435 Normal"])

但在我的想法中,我想读取数组列表之类的数据,例如对于 Ali:1 是一个元素,Ali 是一个元素,1201345673 是一个元素,Normal 是 Map 客户列表中的另一个元素.我怎样才能修改我的代码来做这样的事情?

这是我的客户类,以防万一:

public class Customer {
private int customerNo;
private String name;
private int phoneNo;
private String status;
public Customer () {}
public Customer (int customerNo, String name, int phoneNo, String status){
    this.customerNo = customerNo;
    this.name = name;
    this.phoneNo = phoneNo;
    this.status = status;
}
public String getName(){
    return name;
}

public String toString(){
    return customerNo + " " + name + " " + phoneNo + " " + status;
}

这是我的 csv 文件:

1,Ali,1201345673,Normal
2,Siti,1307891435,Normal

感谢您的关注。

【问题讨论】:

    标签: java list arraylist


    【解决方案1】:

    假设客户名称是唯一的,则无需返回Map&lt;String, List&lt;Customer&gt;&gt;,因为每个List 将包含一个Customer

    您可以将代码更改为:

    Map<String, Customer> customers =
    Files.lines(Paths.get("customer.csv"))
            .map(line -> line.split("\\s*,\\s*"))
            .map(field -> new Customer(
                    Integer.parseInt(field[0]), field[1],
                    Integer.parseInt(field[2]), field[3]))
            .collect(Collectors.toMap(Customer::getName, Function.identity()));
    

    如果名称不是唯一的,您可以按客户 ID 为客户编制索引。

    至于I would like to read the data like the array list such as for Ali: 1 is an element , Ali is an element , 1201345673 is an element and Normal is another element in the list in the Map customer - 这对我来说没有意义。您已经从输入的每一行创建了一个 Customer 对象,与 List 属性相比,它更有用且类型安全。

    【讨论】:

    • 之所以要谈这个是因为我有一个这样的代码: List search = customers.get(signInName);用户输入姓名,我们找到姓名的数据并使用对齐的数据输出它,但它只输出一个元素:“1,阿里,1201345673,正常”,我不能做对齐的格式。
    • 再问一个问题,Function.identity 是做什么的?
    • @WeiJunTee Function.identity() 是一个返回您传递给它的参数的函数。它等价于 lambda 表达式 x -> x.
    • "1 Ali 1201345673 Normal" 就是 Customer 类的 toString() 方法返回的内容。如果您对此有疑问,请更改它。
    • 那么如何更改 toString() 方法?
    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多