从arraylist搜索数据 我是一个C++新手。 现在我正在做一个项目,需要从csv文件中读取客户列表,然后搜索是否有类似“Ali”的用户名,并打印出有关Ali的所有数据。 我如何搜索“阿里”并打印出有关阿里的所有数据,如客户编号、姓名、电话号码和状态? 如果有多个带有“Ali”的数据,如何打印出所有这些数据? 这是我的密码: import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.Iterator; public class LoadCustomer { public static void main(String[] args) throws IOException{ System.out.println ("Load customer from file"); ArrayList<Customer> customers = readCustomerFromFile(); System.out.println (customers); System.out.println (); private static ArrayList<Customer> readCustomerFromFile() throws IOException{ ArrayList<Customer> customers = new ArrayList<>(); List<String> lines = Files.readAllLines(Paths.get("customer.csv")); for (int i = 1 ; i < lines.size() ; i++){ String[] items = lines.get(i).split(","); int customerNo = Integer.parseInt(items[0]); int phoneNo = Integer.parseInt(items[2]); customers.add (new Customer(customerNo,items[1],phoneNo,items[3])); } return customers; } }

从arraylist搜索数据 我是一个C++新手。 现在我正在做一个项目,需要从csv文件中读取客户列表,然后搜索是否有类似“Ali”的用户名,并打印出有关Ali的所有数据。 我如何搜索“阿里”并打印出有关阿里的所有数据,如客户编号、姓名、电话号码和状态? 如果有多个带有“Ali”的数据,如何打印出所有这些数据? 这是我的密码: import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.Iterator; public class LoadCustomer { public static void main(String[] args) throws IOException{ System.out.println ("Load customer from file"); ArrayList<Customer> customers = readCustomerFromFile(); System.out.println (customers); System.out.println (); private static ArrayList<Customer> readCustomerFromFile() throws IOException{ ArrayList<Customer> customers = new ArrayList<>(); List<String> lines = Files.readAllLines(Paths.get("customer.csv")); for (int i = 1 ; i < lines.size() ; i++){ String[] items = lines.get(i).split(","); int customerNo = Integer.parseInt(items[0]); int phoneNo = Integer.parseInt(items[2]); customers.add (new Customer(customerNo,items[1],phoneNo,items[3])); } return customers; } },java,arraylist,Java,Arraylist,这是我的数据: CustomerNo Name PhoneNo Status 1 Ali 12345 Normal 2 Siti 23456 Normal 3 Rone 78910 Normal 4 Jean

这是我的数据:

 CustomerNo            Name       PhoneNo     Status
    1                  Ali        12345        Normal
    2                  Siti       23456        Normal
    3                  Rone       78910        Normal
    4                  Jean       56789        Normal
    5                  Roby       28573        Normal
    6                  Ali        78532        Normal
非常感谢您的关注。 编辑: 以下是我的程序代码:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;


public class FindCustomer {
    public static void main(String[] args) throws IOException{
        System.out.println ("Load customer from file");
        java.util.Map<String, List<Customer>> customers =
        Files.lines(Paths.get("customer.csv"))
                .map(line -> line.split(","))
                .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);
    }
import java.io.IOException;
导入java.nio.file.Files;
导入java.nio.file.path;
导入java.util.List;
导入java.util.stream.collector;
公共类FindCustomer{
公共静态void main(字符串[]args)引发IOException{
System.out.println(“从文件加载客户”);
java.util.Map客户=
Files.line(path.get(“customer.csv”))
.map(直线->直线分割(“,”)
.map(字段->新客户)(
整数.parseInt(字段[0]),字段[1],
整数.parseInt(字段[2]),字段[3]))
.收藏(收藏家)
.groupingBy(Customer::getName));
System.out.println(客户);
}

}这是一个有点宽泛的问题

如果您希望经常这样做,并且需要大量的数据,那么当其他人面对大量需要在其上运行查询的关系数据时,您可以像其他人那样做。使用数据库,如postgres或h2。要与来自java的用户交互,请使用或

如果这只是一个小的简单文本文件和/或您正在尝试学习一些java,那么,您在这里仍然有两个选择:您可以循环数据,或者,您可以构建映射

循环选项很简单:

for (Customer c : customers) if (c.getName().equals("Ali")) {
   // do what you want here. 'c' holds the customer object of Ali.
}
当然,这确实需要每次对所有条目进行一次完整的运行。另一个选项是构建映射:

var map = new HashMap<String, Customer>();
for (Customer c : customers) map.put(c.getName(), c);
// map now maps a customer name to the customer object.
Customer ali = map.get("Ali");
var-map=newhashmap();
for(Customer c:customers)map.put(c.getName(),c);
//现在映射将客户名称映射到客户对象。
客户阿里=地图获取(“阿里”);

地图有一个优点,即它们几乎可以即时查找。即使映射包含一百万个条目,
map.get(x)
也是(接近)即时的。如果您有大量数据,并且需要进行大量查找,那么这是一个不错的解决方案。但是,你必须为你想查询的所有东西建立一个完整的地图。所以,如果您想查找姓名,然后像“获取状态正常的6位电话号码的所有客户”,那么,获取一个数据库。

正如建议的那样,地图将非常有用。您可以在读取文件时动态创建一个

  • 分道扬镳
  • 创建一个客户
  • 并在地图中按名称对其进行分组
现在,地图将保留每个名称,以及所有具有该名称的客户

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



现在,您可以根据需要格式化或以其他方式使用列表。你仍然需要通过TIG/catch来处理异常。

你在C++中怎么做?<代码> Ali <代码>存在两次,所以最后一个语句不能工作,或者只返回最近的添加。可能需要一个
HashMap
我得到了一个错误“方法groupingBy”(函数你的客户类是否有一个返回字符串的
getName
getter?你没有显示你的类,所以我不得不做一个假设。编辑了客户类。你让它工作了吗?如果没有,我会检查它。它对我使用你的类很好。好的,我想现在很好,谢谢。
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));


List<Customer> ali = customers.get("Ali");