2016-06-07 61 views
1

我试图返回有关数据库中客户的信息,并且信息按客户名称排序。我用Collection.sort来排序我的数据,但当我通过客户迭代并添加到mediaIlog并返回它时,我得到一个错误,说该方法必须返回值类型String即使当我返回一个字符串。有人能帮我吗?迭代并添加到字符串

//collection.sort 
public class Customer implements Comparable<Customer> 
{ 
    public Customer(String name) { 
     this.name = name; 
    } 

    public int compareTo(Customer ot) { 
     String name1 = this.name; 
     String name2 = ot.name; 
     return name1.compareTo(name2); 
    } 
} 

这是我用来通过客户迭代添加到mediaIlog并返回它的方法和它给了我上述错误。

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

public String getAllCustomers() 
{ 
    String mediaIlog = ""; 
    for (Customer P : customers) 
     return mediaIlog.add(P);  
} 
+0

['java.lang.String'](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html)没有方法'add'。这里使用的是什么字符串? – MikeCAT

+0

您正试图在循环内返回一个函数..您需要在返回字符串之前关闭所有添加完成的循环。 – WongKongPhooey

回答

1

使用StringBuffer来累积字符串。 Assumming类客户有一个toString方法正确implemmented:

public String getAllCustomers(){ 
    StringBuffer mediaIlog = new StringBuffer(); 
     for (Customer P : customers){ 
     mediaIlog.append(P); 
     } 

    return mediaIlog.toString() 

} 
+0

除非您需要线程安全性,否则您确实应该使用StringBuilder。 –

1

我认为问题是,你正在返回什么错误,你应该这样做

public String getAllCustomers() 
{ 
    String mediaIlog = ""; 
    for (Customer P : customers){ 
     mediaIlog += P; 
    } 
    return mediaIlog; 
} 
0

除了已经给出的答案,这里是一个替代方法:

public String getAllCustomers() 
{ 
    return this.customers.stream() 
      .map(Object::toString) 
      .collect(Collectors.joining()); 
} 

Java streams是一个非常强大的工具。您可以轻松地扩展这个例子,像这样:

return this.customers.stream() 
     .filter(Customer::hasOrders) 
     .sorted(Comparator.comparing(Customer::getRevenue)) 
     .limit(10) 
     .map(customer -> customer.getFirstName() + " " + customer.getLastName()) 
     .collect(Collectors.joining(", ")); 

这将返回一个逗号分隔的用户名和姓具有顺序,但低收益的前10名。