将枚举列表转换为数组

Convert List of enum into array

我有这个枚举结构List<Role>

public enum Role implements GrantedAuthority {
  ROLE_ADMIN, ROLE_CLIENT;

  public String getAuthority() {
    return name();
  }

}

我尝试实现这个:

Stream<String> stringStream = roles.stream().filter(Objects::nonNull)
                .map(s -> s.getAuthority().toString());

        String s1 = stringStream.toString();

响应 DTO:

public class DTO {

    private String role;
}

但我得到的回应是:

{
"role": "java.util.stream.ReferencePipeline@7d499cdc",
}

我想要 return 类似的东西:

{
"role": [
        ROLE_ADMIN, ROLE_CLIENT
     ]
}

如何以这种方式打印响应?

尝试使用对象映射器的函数writeValueAsString。理想情况下,这应该可以解决您的问题。 toString()这里帮不了你。

ObjectMapper ob = new ObjectMapper();
ob.writeValueAsString(roles.stream().filter(Objects::nonNull)
                .map(s -> s.getAuthority().toString()));

类似的内容会对您有所帮助。

要解决您的问题,您可以使用:

String s1 = roles.stream()
    .filter(Objects::nonNull)
    .map(s -> s.getAuthority().toString())
    .collect(Collectors.toList())
    .toString();

但我认为你的逻辑不正确,响应 Dto 应该是这样的:

public class DTO {
    private Lis<String> role;
    
    // getter, setter and constructor
}

然后你的流应该是:

List<String> authorities = roles.stream()
        .filter(Objects::nonNull)
        .map(s -> s.getAuthority().toString())
        .collect(Collectors.toList());
DTO response = new DTO(authorities);