我有一个初始列表,其中包含:1,2,3,4,5,6,7 我想创建一个StringBuffer数组,每个元素只包含3个项目作为StringBuffer(String):
1,2,3
4,5,6
7
最初我解决了这个问题,如下例所示,但我不想使用其他列表来执行此操作:
List accounts = new ArrayList();
List<Person> listOfObjects = results.getResults();
for(Person p: listOfObjects) {
String persAccount = p.getAccount();
accounts.add(persAccount);
}
String s = listToString(accounts);
public String listToString(List list) {
StringBuffer b = new StringBuffer();
for (int i = 0; i < list.size(); i++) {
b.append(String.valueOf(list.get(i)));
if (i < list.size()-1)
b.append(',').toString();
}
return b.toString();
}
我认为一种有效的方法是创建一个StringBuffer并在for块中附加所有值。(3乘3)。
我怎样才能以有效的方式做到这一点?
答案 0 :(得分:0)
这是您的代码的简单版本,其中没有创建中间列表。仅使用StringBuilder
代替StringBuffer
。
List<Person> personList = new ArrayList<>();
personList.add(new Person(1));
personList.add(new Person(2));
personList.add(new Person(3));
personList.add(new Person(4));
personList.add(new Person(5));
personList.add(new Person(6));
personList.add(new Person(7));
List<StringBuilder> stringBuilderList = new ArrayList<>();
int numberOfIntegerPerStringBuilder = 3;
int index = 0;
StringBuilder stringBuilder = null;
for (Person person : personList) {
if (index % numberOfIntegerPerStringBuilder == 0) {
stringBuilder = new StringBuilder();
stringBuilderList.add(stringBuilder);
}
if (stringBuilder != null) {
stringBuilder.append(person.getAccount());
stringBuilder.append(",");
}
index++;
}
for (StringBuilder sb : stringBuilderList) {
sb.deleteCharAt(sb.lastIndexOf(","));
System.out.println(sb.toString());
}