【问题标题】:Listing customers by name from a text file从文本文件中按名称列出客户
【发布时间】:2016-03-12 19:11:15
【问题描述】:

我正在处理一个项目,我的客户对文本文件有保留。我希望能够“列出客户”他们,然后让他们按客户名称的字母顺序出现。我现在只有:

public static void listCustomers(List<Customer> customers) {  
    System.out.format("\033[31m%s\033[0m%n", "Customers");
    System.out.format("\033[31m%s\033[0m%n", "=========");
    for (Customer c : customers) {
        System.out.format("\033[33m%s\033[0m%n", "Customer"); 
        System.out.format("\033[33m%s\033[0m%n", "--------"); 
        System.out.println(c);
    }       
}   

这就像它列出了客户一样有效,但它并没有像我希望的那样按字母顺序列出它们。我对编码有点陌生,所以如果这是一种愚蠢的方法,请告诉我。谢谢:)

【问题讨论】:

标签: java


【解决方案1】:

您可以使用Collections.sort(Comparator&lt;? super Customer&gt;...) 方法来实现这一点。

您只需要自己实现 Comparator。

import java.util.Comparator;

public class CustomerComparator implements Comparator<Customer> {

    @Override
    public int compare(Customer c1, Customer c2) {
        return c1.toString().compareTo(c2.toString());
    }
}

这将按字典顺序比较客户的 toString() 值,换句话说,按字母顺序,按升序排列。 如果您需要按客户名称排序,请将 toString() 替换为适当的名称属性。 (通常是 getName())Collections.sort 将使用 toString() 进行排序,因此如果您的 toString() 方法返回 name 属性,您只需输入 customers.sort()

打印结果:

public static void listCustomers(List<Customer> customers) { 
    CustomerComparator comparator = new CustomerComparator();
    customers.sort(comparator);

    System.out.format("\033[31m%s\033[0m%n", "Customers");
    System.out.format("\033[31m%s\033[0m%n", "=========");
    for (Customer c : customers) {
        System.out.format("\033[33m%s\033[0m%n", "Customer"); 
        System.out.format("\033[33m%s\033[0m%n", "--------"); 
        System.out.println(c);
    }       
}

如果你想省去一个额外的类,你可以声明接口内联,像这样:

customers.sort(new Comparator<Customer>() {
    public int compare(Customer c1, Customer c2) {
        return c1.toString().compareTo(c2.toString());
    }
});

【讨论】:

  • 它说“需要一个包含 CustomerComparator 的封闭实例”对不起,如果这很明显哈哈
  • CustomerComparator必须在自己的文件中。
【解决方案2】:

你可以用下面的比较器来做。

Main.java

public class Main {

    public static void main(String[] args) {

        List<Customer> customers = new ArrayList<Customer>();

        customers.add(new Customer("001", "Namal"));
        customers.add(new Customer("002", "Lakmini"));
        customers.add(new Customer("003", "Ahas"));

        System.out.println("main().customers 1 : " + customers);

        Collections.sort(customers,new NameSorter());

        System.out.println("main().customers 2 : " + customers);

    }

}

Customer.java

public class Customer {

    public Customer(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return this.id + "|" + this.name;
    }

    private String name = null;
    private String id = null;

}

NameSorter.java

public class NameSorter implements Comparator<Customer>{

    @Override
    public int compare(Customer o1, Customer o2) {
        return o1.getName().compareTo(o2.getName());
    }

}

【讨论】:

    【解决方案3】:
    Collections.sort(customers);
    

    //然后用你现在的逻辑打印

    【讨论】:

      猜你喜欢
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2016-04-30
      • 1970-01-01
      • 2018-04-28
      • 2012-03-13
      • 2019-01-06
      相关资源
      最近更新 更多