前言
我们都知道
List<String> list = new ArrayList<>();
list.add("jianglei");
list.add("dengyi");
String str = list.toString();
System.out.println(str); //会输出[jianglei, dengyi]
上述调用的toString()方法其实是在AbstractCollection类中封装好的
在开发中我们也会遇到类似的问题
比如给定了一个数组{“a”, “b”, “c”}
让我们拼接成如下的形式”(name = a AND name = b AND name = c)”
最主要的问题是当遍历到最后一个元素时,不能添加AND了
思路
其实就是最后一个元素的判断了,如果遍历到最后一个元素,就不添加AND
实现
String[] params = {"a", "b", "c"};
StringBuilder sb = new StringBuilder();
sb.append('(');
for(int i = 0, len = params.length; i < len; i++){
sb.append("name = ")
.append(params[i]);
if(i != (len -1)){
sb.append(" AND ");
}
}
sb.append(')');
System.out.println(sb); //(name = a AND name = b AND name = c)
JDK AbstractCollection中的toString()方法
在这里E是范型参数,我们把它当作一个对象就好。
这种代码的实现思路好新颖,值得学习一下
public String toString() {
Iterator<E> it = iterator();
if (! it.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = it.next();
//这里判断集合中的元素是不是引用了自身,防止递归调用
sb.append(e == this ? "(this Collection)" : e);
if (! it.hasNext())
return sb.append(']').toString();
sb.append(',').append(' ');
}
}