我需要打印商店的名称(此方法在Shop类中)以及产品名称(这是一个arraylist)和产品的价格(使用产品类中的getter来完成) )。我想循环遍历arraylist中的所有产品,我该怎么做?
如果有什么不清楚请注释,我会编辑问题以使其更清晰。
public String toString()
{
for(int i=0; i<products.size();i++)
{
return "Shop"+"["+"name"+" = "+name+","+"Product name"+" = "+products.get(i).getName()+", "+"Price"+" = "+products.get(i).getPrice()+"]";
}
return null;
}
这是错误的,因为i ++是一个死代码,这意味着循环将执行一次。有什么帮助吗? 谢谢你的时间
答案 0 :(得分:5)
使用public String toString() {
StringBuilder sb = new StringBuilder("Shop").append("[name = ").append(name)
for (Product product : products) {
sb.append(",")
.append("Product name = ").append(product.getName())
.append(", Price = ").append(product.getPrice())
.append("]");
}
return sb.toString();
}
:
+
不要在循环中使用{{1}}来连接字符串(如接受的答案那样),因为它会在每次迭代中创建一个字符串构建器来连接字符串,然后将它附加到外部字符串构建器。 / em>的
答案 1 :(得分:1)
使用return
语句将结束函数的执行。这就是你要做的事情。
public String toString()
{
StringBuilder result = new StringBuilder();
result.append("Shop [ name = "+name+" ");
for(Product p : products)
{
result.append("Product name"+" = "+p.getName()+", "+"Price"+" = "+p.getPrice()+" ");
}
result.append("]");
return result.toString();
}
答案 2 :(得分:1)
您可以使用Guava Objects Class方便构建对象toString()。他们最近将其更改为MoreObjects.ToStringHelper
public String toString(){
ToStringHelper toStringHelper = MoreObjects.toStringHelper(this);
for (Product p : products)
{
toStringHelper.add("name", p.name);
toStringHelper.add("Product name", p.getName();
}
return toStringHelper.toString();
}
答案 3 :(得分:1)
您可以使用 StringJoiner (https://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html)
public String toString(){
StringJoiner string = new StringJoiner(", ", name + "[", "]");
for (Product p : list) {
string.add("Product name:" + p.getName()).add("Product value:"+p.getValue());
}
return string.toString();
}
Output:
Shop[Product name:Teste, Product value:1.0, Product name:teste2, Product value:2.0]
答案 4 :(得分:0)
如果您有一个小集合,则始终可以使用+连接字符串。
创建StringBuilder会为小示例带来不必要的开销。
除此之外,如果编译器可以改善性能,则会优化该部分代码。
public String toString() {
String str = "Shop [name = " + name + " ";
for (Product product : products) {
str += ", Product name = " + product.getName();
str += ", Price = " + product.getPrice() + "]";
}
return str;
}