我有课:
public class Item {
private String first;
private String second;
public Item(String first, String second) {
this.first = first;
this.second = second;
}
}
以及这些对象的列表:
List<Item> items = asList(new Item("One", "Two"), new Item("Three", "Four"));
我的目标是加入元素列表以构建以下字符串:
One: Two; Three: Four;
我试过使用StringJoiner,但看起来它设计用于处理一些简单类型的列表。
你可以试试这样的东西:
final String result = items.stream()
.map(item -> String.format("%s: %s", item.first, item.second))
.collect(Collectors.joining("; "));
正如assylias在下面的评论中提到的,使用这种结构将错过最后的;
。它可以手动添加到最终的String中,也可以尝试使用assylias建议的解决方案。
您可以将项目映射到连接字段的字符串,然后连接项目,用空格分隔它们:
String result = items.stream()
.map(it -> it.field1 + ": " + it.field2 + ";")
.collect(Collectors.joining(" "));
第一步是加入field1
和field2
。
第二步是加入;
。
请注意,这不会在最后添加;
。
List<Item> items = asList(new Item("One", "Two"), new Item("Three", "Four"));
String joined = items.stream()
// First step
.map(it -> it.field1 + ": " + it.field2)
// Second step
.collect(Collectors.joining("; "));
或者更好的是:移动逻辑将field1
和field2
加入专用方法:
public static class Item {
private String field1;
private String field2;
public Item(String field1, String field2) {
this.field1 = field1;
this.field2 = field2;
}
public String getField1And2() {
return field1 + ": " + field2;
}
}
并在流中使用那个。
String joined = items.stream()
.map(Item::getField1And2)
.collect(Collectors.joining("; "));