如何使用Java 8和StringJoiner连接来自列表的两个字段?

我有类:如何使用Java 8和StringJoiner连接来自列表的两个字段?

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在下面的评论中提到,最后;将错过使用这种结构。它可以手动添加到最终的字符串中,或​​者您可以简单地尝试由assylias建议的解决方案。

回答:

您可将商品映射到串接的字段,然后加入项目的字符串,它们用空格分隔:

String result = items.stream() 

.map(it -> it.field1 + ": " + it.field2 + ";")

.collect(Collectors.joining(" "));

回答:

第一步是加入field1field2

第二步是加入;

请注意,这不会在最后添加;

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("; "));

某种程度上更OO

或者更好的是:移动逻辑加盟field1field2到一个专门的方法:

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("; "));

以上是 如何使用Java 8和StringJoiner连接来自列表的两个字段? 的全部内容, 来源链接: utcz.com/qa/266480.html

回到顶部