如何根据 java 中的 属性 的值将对象列表转换为字符串列表?
How transform a list of objects to a list of strings based on the value of a property in java?
有没有一种方法可以根据 属性 的值将对象列表转换为字符串列表?我有一个实体标签
public class Tag {
private int tagID;
private String description;
}
我得到了一个标签列表及其 ID 和描述:
[Tag [tagID=1, description=121], Tag [tagID=1, description=244], Tag [tagID=1, description=331], Tag [tagID=2, description=244], Tag [tagID=2, description=122]]
而我需要的是:
List<String> output = ["121,244,331", "244,122"]
到目前为止我整理了这个:
String description = tags.stream().map(Tag::getDescription).collect(Collectors.joining( ";" ));
输出一个标签的结果
String description = "121,244,331"
当然,我可以 运行 它通过一个循环并将结果附加到一个数组,但我想知道是否有更优雅的方式 - 甚至是一行?
您可以使用 Collectors.groupingBy
按标签 ID 分组,然后使用 Collectors.joining
加入描述
List<String> res = new ArrayList<>(tagList.stream().collect(
Collectors.groupingBy(Tag::getTagID,
Collectors.mapping(Tag::getDescription, Collectors.joining(",")))).values());
我想你正在寻找:
List<String> result = tags.stream()
.collect(Collectors.groupingBy(Tag::getTagID))
.values()
.stream()
.map(t -> t.stream().map(Tag::getDescription).collect(Collectors.joining( ";" )))
.collect(Collectors.toList());
输出
[121;244;331, 244;122]
有没有一种方法可以根据 属性 的值将对象列表转换为字符串列表?我有一个实体标签
public class Tag {
private int tagID;
private String description;
}
我得到了一个标签列表及其 ID 和描述:
[Tag [tagID=1, description=121], Tag [tagID=1, description=244], Tag [tagID=1, description=331], Tag [tagID=2, description=244], Tag [tagID=2, description=122]]
而我需要的是:
List<String> output = ["121,244,331", "244,122"]
到目前为止我整理了这个:
String description = tags.stream().map(Tag::getDescription).collect(Collectors.joining( ";" ));
输出一个标签的结果
String description = "121,244,331"
当然,我可以 运行 它通过一个循环并将结果附加到一个数组,但我想知道是否有更优雅的方式 - 甚至是一行?
您可以使用 Collectors.groupingBy
按标签 ID 分组,然后使用 Collectors.joining
List<String> res = new ArrayList<>(tagList.stream().collect(
Collectors.groupingBy(Tag::getTagID,
Collectors.mapping(Tag::getDescription, Collectors.joining(",")))).values());
我想你正在寻找:
List<String> result = tags.stream()
.collect(Collectors.groupingBy(Tag::getTagID))
.values()
.stream()
.map(t -> t.stream().map(Tag::getDescription).collect(Collectors.joining( ";" )))
.collect(Collectors.toList());
输出
[121;244;331, 244;122]