如何根据 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]