[英]How to use a loop in a toString?
我需要打印商店的名称(此方法在Shop类中)以及产品名称(这是一个数组列表)和产品的价格(使用Product类中的吸气剂完成)。 我想遍历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 ++是无效代码,这意味着循环将执行一次。 有什么帮助吗? 谢谢你的时间
使用StringBuilder
:
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();
}
不要在循环内部使用+
来连接字符串(正如公认的答案一样),因为它将在每次迭代中创建一个stringbuilder来连接字符串,然后将其附加到外部stringbuilder上。
使用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();
}
您可以使用Guava Objects Class来简化对象toString()的创建,他们最近将MoreObjects.ToStringHelper
更改为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();
}
您可以使用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]
如果集合很小 ,则始终可以用+连接字符串。
创建StringBuilder为小示例提供了不必要的开销。
除此之外,如果编译器可以改善性能,它将优化该部分代码。
public String toString() {
String str = "Shop [name = " + name + " ";
for (Product product : products) {
str += ", Product name = " + product.getName();
str += ", Price = " + product.getPrice() + "]";
}
return str;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.