2016-06-07 55 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名。