java - 如何根据java中的属性值将对象列表转换为字符串列表?

kre*_*nkz 1 java java-stream collectors

有没有办法根据属性的值将对象列表转换为字符串列表?我有一个实体标签

public class Tag {

    private int tagID;
    private String description;
}
Run Code Online (Sandbox Code Playgroud)

我得到一个带有 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]]
Run Code Online (Sandbox Code Playgroud)

我需要的是:

List<String> output = ["121,244,331", "244,122"]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我把这个放在一起:

String description = tags.stream().map(Tag::getDescription).collect(Collectors.joining( ";" ));
Run Code Online (Sandbox Code Playgroud)

输出一个标签的结果

String description = "121,244,331"
Run Code Online (Sandbox Code Playgroud)

当然,我可以通过循环运行它并将结果附加到数组中,但我想知道是否有更优雅的方式 - 甚至是单行?

Ekl*_*vya 5

您可以使用Collectors.groupingBy按标签 ID 分组,然后使用加入描述Collectors.joining

List<String> res = new ArrayList<>(tagList.stream().collect(
                        Collectors.groupingBy(Tag::getTagID,
                                Collectors.mapping(Tag::getDescription, Collectors.joining(",")))).values());
Run Code Online (Sandbox Code Playgroud)