gpt4 book ai didi

Java动态列标题

转载 作者:行者123 更新时间:2023-12-01 11:04:03 31 4
gpt4 key购买 nike

我有一个要求,我需要进行一些 Java 调用并检索必要的值。这些都是字符串。我需要将其写入带有逗号分隔值的控制台。如下所示:

3,Till,,Till,Weiss,,
3,ugilad,,ugilad,ugilad,,
3,admintest,,admin,test,abc@sample.com,

预期应该是:

userid,firstname,lastname,email
3,Till,,Till,Weiss,,
3,ugilad,,ugilad,ugilad,,
3,admintest,,admin,test,abc@sample.com,

现在我需要向这些值添加列。像这样说:userId、firstName、lastName。如何使用 Java 代码动态实现这一点?这是我编写的代码:

                if (usersList.totalCount != 0 && usersList.totalCount >= 1) {
System.out.println("usersList.totalCount ----->"
+ usersList.totalCount);
for (KalturaUser user : usersList.objects) {
if (user != null) {
if (user.id != null) {
String userRole = getUserRole(user.id);
String cnum = getUserUniqueId(user.email);
// if (userRole != null) {
// if (userRole.equals("adminRole")
// || userRole
// .equals("privateOnlyRole")) {
// sb1.append(action);

if (user.id != null) {
sb.append(user.id);
} else {
sb.append(",");
}
String action = "1";

if (cnum != null) {
if (userRole == null) {
action = "3";
}
} else {
action = "3";
}
if (action != null) {
sb1.append(action);
}
if (cnum != null) {
sb1.append(",").append(cnum);
} else {
sb1.append(",").append(user.id);
sb1.append(",");
}

if (user.firstName != null) {
sb.append(",").append(user.firstName);
sb1.append(",").append(user.firstName);
} else {
sb.append(",");
sb1.append(",");
}
if (user.lastName != null) {
sb.append(",").append(user.lastName);
sb1.append(",").append(user.lastName);
} else {
sb.append(",");
sb1.append(",");
}
if (userRole != null) {
sb.append(",").append(userRole);
// sb1.append(",").append(userRole);
} else {
sb.append(",");
// action = "3";
// sb1.append(action);
}
// sb1.append("1");
if (user.email != null) {
sb.append(",").append(user.email);
sb1.append(",").append(user.email);
} else {
sb.append(",");
sb1.append(",");
}

if (userRole != null) {
sb1.append(",").append(userRole);
} else {
sb1.append(",");
}

// sb1.append("1");

if (user.partnerData != null) {
if (user.partnerData.startsWith("pw")
&& user.partnerData.length() == 43) {
sb.append(",");
}
if (user.partnerData.length() > 43) {
String partnerData = user.partnerData
.substring(44);
sb.append(",").append(partnerData);
}
if (!user.partnerData.startsWith("pw")) {
sb.append(",").append(user.partnerData);
}
}
sb.append(System.getProperty("line.separator"));
sb1.append(System.getProperty("line.separator"));
}
}
}
}
// System.out.println(sb);
System.out.println(sb1);

最佳答案

根据您的代码,您将所有内容附加到字符串缓冲区(sb)并立即打印。因此,在循环之间,您可以创建一个字符串 header 并根据条件分配值。在循环外首先打印标题,然后打印缓冲区。这将是最简单的灵魂。但是,如果数据量很大,最好使用文件。将所有内容写入文件,构造 header ,然后在循环后打印 header ,然后打印文件。具有虚拟逻辑和类的示例

import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List;

class UserList {
public int totalCount;
public List<KalturaUser> objects;

public UserList(List<KalturaUser> objects) {
this.objects = objects;
this.totalCount = (objects != null) ? objects.size() : 0;
}
}

class KalturaUser {
public String id;
public String email;
public String firstName;
public String lastName;
public String partnerData;

public KalturaUser(String id, String email, String firstName,
String lastName, String partnerData) {
this.id = id;
this.email = email;
this.firstName = firstName;
this.lastName = lastName;
this.partnerData = partnerData;
}
}

public class DynamicHeader {

private static final String NEW_LINE = System.getProperty("line.separator");

public static void main(String[] args) throws Exception {
UserList usersList = init();
RandomAccessFile csv = new RandomAccessFile("temp.csv","rw");
csv.setLength(0); //Clears the file
String header = "";
if (usersList.totalCount >= 1) {
for (KalturaUser user : usersList.objects) {
if (user != null && user.id != null) {
List<String> row = new ArrayList<String>();
String userRole = getUserRole(user.id);
String cnum = getUserUniqueId(user.email);
row.add(getNullSafeValue(user.id));
String action = "1";
if (cnum == null || userRole == null) {
action = "3";
}
row.add(action);
if (cnum != null) {
row.add(cnum);
header = "uniqueid,firstname,lastname,email";
} else {
row.add(user.id);
header = "userid,firstname,lastname,email";
}
row.add(getNullSafeValue(user.firstName));
row.add(getNullSafeValue(user.lastName));
row.add(getNullSafeValue(userRole));
row.add(getNullSafeValue(user.email));
if (user.partnerData != null) {
if (user.partnerData.startsWith("pw")) {
if (user.partnerData.length() == 43) {
row.add("");
} else if (user.partnerData.length() > 43) {
row.add(user.partnerData.substring(44));
}
} else {
row.add(user.partnerData);
}
}
csv.write(row.toString().replace("[", "").replace("]", "").replace(", ", ",").getBytes());
csv.write(NEW_LINE.getBytes());
}
}
}
csv.seek(0);
System.out.println(header);
String data;
while((data = csv.readLine()) != null){
System.out.println(data);
}
csv.close();
}

private static UserList init() {
List<KalturaUser> userObjs = new ArrayList<KalturaUser>();
userObjs.add(new KalturaUser("1", null, "Till", "Till", "Weiss"));
userObjs.add(new KalturaUser("2", null, "ugilad", "ugilad", "ugilad"));
userObjs.add(new KalturaUser("3", "abc@sample.com", "admin", "test", "admintest"));
return new UserList(userObjs);
}

private static String getNullSafeValue(String str) {
return (str != null) ? str : "";
}

private static String getUserUniqueId(String email) {
return (email != null) ? email.substring(0, email.indexOf("@")) : null; //Replace with proper logic
}

private static String getUserRole(String id) {
return ("2".equals(id)) ? "Role 2" : null; //Replace with proper logic
}

}

除此之外,您还可以在代码中进行一些清理,如下所示。您也可以将其添加到列表中,而不是构造字符串。列表的 toString 为您提供一个逗号分隔的值。

(usersList.totalCount != 0 && usersList.totalCount >= 1)    

可以减少到(usersList.totalCount > 0)

if (user != null) {  
if (user.id != null) {}
}

如果您不必在 (user != null) 时执行任何特定操作,则可以将其合并为

if (user != null && user.id != null) {}

还有

if (cnum != null) {
if (userRole == null) {
action = "3";
}
} else {
action = "3";
}

这可以减少到

if (cnum == null || userRole == null) {
action = "3";
}

关于Java动态列标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33129287/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com