【问题标题】:Convert List of enum into array将枚举列表转换为数组
【发布时间】:2020-06-30 18:15:46
【问题描述】:

我有这个枚举结构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$3@7d499cdc",
}

我想返回类似的东西:

{
"role": [
        ROLE_ADMIN, ROLE_CLIENT
     ]
}

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

【问题讨论】:

  • 流中有几个终端操作可供您使用。请查看tutorialspoint.com/java-8-stream-terminal-operations.collect() 对你有用。
  • 什么是roles
  • 我的错。只是一个变量。
  • 只是一个变量!!包含什么?哪种类型?
  • 用于存储列表

标签: java spring java-stream dto


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    这样的事情会帮助你。

    【讨论】:

      猜你喜欢
      • 2013-01-17
      • 2019-03-04
      • 1970-01-01
      • 2011-08-02
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      相关资源
      最近更新 更多