繁体   English   中英

如何在toString中使用循环?

[英]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();
}

您可以使用StringJoinerhttps://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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM