StringJoiner删除每行开头的分隔符

5

我有以下代码:

StringJoiner stringJoiner = new StringJoiner(",");
List<Person> persons = Arrays.asList(new Person("Juan", "Dela Cruz"), new Person("Maria", "Magdalena"), new Person("Mario", "Santos"));
persons.forEach(person -> {
    stringJoiner.add(person.getFirstName()).add(person.getLastName() + System.lineSeparator());
});

我希望输出的格式是这样的:
Juan,Dela Cruz
Maria,Magdalena
Mario,Santos

然而,对于上述代码,会得到以下结果:
Juan,Dela Cruz
,Maria,Magdalena
,Mario,Santos

如何去掉每行开头的分隔符,

谢谢。

3个回答

5

另一种解决方案是使用流和连接收集器:

String result = persons.stream()
    .map(person -> person.getFirstName() + "," + person.getLastName())
    .collect(Collectors.joining(System.lineSeparator()));

1
这更加简洁。 - Julez

3

你的记录分隔符是换行符,因此你可能想在 for-each 中使用逗号(即交换换行符和逗号的位置):

StringJoiner stringJoiner = new StringJoiner(System.lineSeparator());
...
persons.forEach(person -> stringJoiner.add(person.getFirstName() + 
            ", " + person.getLastName()));

1
为什么不覆盖Person类的toString方法或在Person类中拥有一个返回连接字符串的实用方法?这样,您的代码将简单地执行迭代和合并的工作:
public static String getName(){
return String.format("%s,%s", this.firstName, this.lastName); 
}

然后使用以下任何适当的机制进行迭代和缩减:

     persons.stream()
    .map(Person::getName)
    .collect(Collectors.joining(System.lineSeparator()));

2
我不确定是否能看出 String.format("%s,%s", this.firstName, this.lastName) 相对于 firstName + "," + lastName 的优势。 - Holger
没有特定的优势,只是一种字符串拼接的风格。 - Vinay Prajapati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接