使用来自n个元素的List中的x个元素构建StringBuffer数组

时间:2014-05-15 17:07:59

标签: java arrays

我有一个初始列表,其中包含: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)。

我怎样才能以有效的方式做到这一点?

1 个答案:

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