我有一个要求,我需要将多个Web服务调用中的多个值附加到一个最终字符串中,并使用逗号作为分隔符。
某些值可能为null,在这种情况下,我需要检查not null,然后将其作为空字符串追加。 如果其中一个字符串没有值,则不应附加逗号。
请帮我解决这个问题。这是我所做的代码。
StringBuilder sb = new StringBuilder();
if (usersList.totalCount != 0 && usersList.totalCount >= 1) {
logger.info("usersList.totalCount ----->"
+ usersList.totalCount);
for (KalturaUser user : usersList.objects) {
if (user.id != null) {
sb.append(userId);
}
if (user.firstName != null) {
sb.append(",").append(userFirstName);
}
if (user.lastName != null) {
sb.append(",").append(user.lastName);
}
if (user.email != null) {
sb.append(",").append(user.email);
}
if (user.roleNames != null) {
sb.append(",").append(user.roleNames);
}
if (user.partnerData != null) {
sb.append(",").append(user.partnerData);
}
}
System.out.println(sb);
}
谢谢, 拉吉
答案 0 :(得分:2)
我认为你正在寻找这样的东西:
public static String asString(Object value) {
return value == null ? "" : value.toString();
}
for (KalturaUser user : usersList.objects) {
sb.append(asString(user.id));
sb.append(",").append(asString(user.firstName));
sb.append(",").append(asString(user.lastName));
sb.append(",").append(asString(user.email));
sb.append(",").append(asString(user.roleNames));
sb.append(",").append(asString(user.partnerData));
}
答案 1 :(得分:2)
嗯,在您的测试中
if (user.id != null) {
sb.append(userId);
}
您正在检查user.id
,但附加userId
。这是两个不同的变量。
您应该将其更改为
if (user.id != null) {
sb.append(user.id); //instead of sb.append(userId);
}
答案 2 :(得分:1)
目前尚不清楚您的问题是什么,但如果您正在寻找更好或不同的方法,我发现最好附加到List< String>然后使用StringUtils.join生成最终字符串。
答案 3 :(得分:0)
我会做那样的事情。它基于Java8流,但在这里您不需要对每个属性执行非空检查(.filter
为您执行此操作)。我假设users.object
是一个数组列表,如果不是你可能需要以其他方式将其转换为流
if (userList.totalCount > 0) {
logger.info("usersList.totalCount ----->" + usersList.totalCount);
String result = userList
.objects
.stream()
.map(user -> {
return Stream.of(user.firstName, user.id, user.lastName, user.email, user.roleNames, user.partnerData) //get the properties you need into the stream
.filter(property -> property != null) // filter out null properties
.collect(Collector.joining(",")); //join them by comma
})
.collect(Collector.joining(",")); //join user strings with comma
System.out.println(result);
}
答案 4 :(得分:0)
您可以使用名为Joiner的Google图书馆中的类。
String concatenedString = Joiner.on(",").skipNulls().join(itemToAdd);
您可以在google-collections-1.0.jar
上找到此课程