如何在toString中使用循环?

时间:2016-12-04 17:41:41

标签: java

我需要打印商店的名称(此方法在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 ++是一个死代码,这意味着循环将执行一次。有什么帮助吗? 谢谢你的时间

5 个答案:

答案 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;
}