如何操作列表到字符串并在单独的行中打印

时间:2012-08-03 19:46:58

标签: java list arraylist

我正在尝试使用以下代码导出4列。最后一列组织是List。

    String appname = "abc";
    String path = "//home/exportfile//";
    String filename = path + "ApplicationExport-" + appname + ".txt";
    String ret = "false";

    QueryOptions ops = new QueryOptions();
    Filter[] filters = new Filter[1];
    filters[0] = Filter.eq("application.name", appname);
    ops.add(filters);

    List props = new ArrayList();
    props.add("identity.name");

    // Do search
    Iterator it = context.search(Link.class, ops, props);

    // Build file and export header row
    BufferedWriter out = new BufferedWriter(new FileWriter(filename));
    out.write("IdentityName,UserName,WorkforceID,Organization");
    out.newLine();

    // Iterate Search Results
    if (it != null) {
        while (it.hasNext()) {

            // Get link and create object
            Object[] record = it.next();
            String identityName = (String) record[0];
            Identity user = (Identity) context.getObject(Identity.class, identityName);

            // Get Identity attributes for export
            String workforceid = (String) user.getAttribute("workforceID");

            // Get application attributes for export
            String userid = "";

            List links = user.getLinks();
            if (links != null) {
                Iterator lit = links.iterator();
                while (lit.hasNext()) {
                    Link l = lit.next();
                    String lname = l.getApplicationName();
                    if (lname.equalsIgnoreCase(appname)) {
                        userid = (String) l.getAttribute("User Name");
                        List organizations = l.getAttribute("Organization");

                        StringBuilder sb = new StringBuilder();
                        String listItemsSeparator = ",";

                        for (Object organization : organizations) {
                            sb.append(organization.toString());
                            sb.append(listItemsSeparator);
                        }

                        org = sb.toString().trim();

                    }
                }
            }

            // Output file
            out.write(identityName + "," + userid + "," + workforceid + "," + org);
            out.newLine();
            out.flush();
        }

        ret = "true";
    }

    // Close file and return
    out.close();
    return ret;

上述代码的输出将为。例如:

IdentityName,UserName,WorkforceID,Organization

dthomas,dthomas001,12345,Finance,HR

如何以下面的方式获得输出

IdentityName,UserName,WorkforceID,Organization

dthomas,dthomas001,12345,Finance

dthomas,dthomas001,12345,HR 

我需要更改代码的内容和位置?

2 个答案:

答案 0 :(得分:0)

删除这个最里面的for块和相关变量:

StringBuilder sb = new StringBuilder();

for (Object organization : organizations)
{
    sb.append(organization.toString());
    sb.append(listItemsSeparator);
}

org = sb.toString().trim();

移动 organizations 的声明 if (it != null) {块:

// Get application attributes for export
String userid = "";
List organizations = null;
List links = user.getLinks();

if (it != null)
{
    Iterator lit = links.iterator();
    while (lit.hasNext())
    {
        Link l = lit.next();
        String lname = l.getApplicationName();
        if (lname.equalsIgnoreCase(appname))
        {
            userid = (String) l.getAttribute("User Name");
            organizations = l.getAttribute("Organization");

然后更改此文件输出代码:

// Output file
out.write(identityName + "," + userid + "," + workforceid + "," + org);
out.newLine();

对此:

// Output file
for (Object organization : organizations)
{
    out.write(identityName + "," + userid + "," + workforceid + "," + organization.toString());
    out.newLine();
}

答案 1 :(得分:0)

您必须为每个组织的文件写一行。因此,基本上,不要将用户的所有组织与字符串构建器连接起来,并将输出语句移动到遍历组织的for循环中。

但很难提供一个有效的例子,因为你所展示的代码还没有编译......


这会让你更接近解决方案:

if (links != null) {
  Iterator lit = links.iterator();
  while (lit.hasNext()) {
    Link l = lit.next();
    String lname = l.getApplicationName();
    if (lname.equalsIgnoreCase(appname)) {
      userid = (String) l.getAttribute("User Name");
      List organizations = l.getAttribute("Organization");
      for (Object organization : organizations) {
        // Output file
        out.write(identityName + "," + userid + "," + workforceid + "," + organization);
        out.newLine();
        out.flush();
      }
    }
  }
}