如何解决将具有属性的枚举转换为Java映射
我的枚举如下:
@AllArgsConstructor
public enum EnumExample {
VAL1("val1 description",100),VAL2("val2 description",200);
String description;
int value;
}
现在,我想返回所有具有属性的枚举值作为地图列表,如下所示:
[
{
"name": "VAL1","description": "val1 description","value": 100
},{
"name": "VAL2","description": "val2 description","value": 200
}
]
我可以使用以下代码实现这一目标:
Arrays.stream(EnumExample.values())
.map(enumExample ->
ImmutableMap.of("name",enumExample.name(),"description",enumExample.description,"value",enumExample.value))
.collect(Collectors.toList())
但是我想知道是否有任何最佳方法来实现相同目的而无需将EnumExample显式转换为Map。如果添加了任何新属性,则该属性应作为新的K,V
对出现在结果映射中。
我尝试了以下方法,但是都只返回枚举值[VAL1,VAL2]
。
-
com.google.common.collect.Lists.newArrayList(EnumExample.values())
-
Arrays.stream(EnumExample.values()).collect(Collectors.toList())
也尝试转换为地图,但返回{"VAL2":"VAL2","VAL1":"VAL1"}
。
Arrays.stream(EnumExample.values())
.collect(Collectors.toMap(o -> o,Function.identity()))
任何不需要手工创建地图的线索或更好的方法都会受到赞赏。
我的要求:
在Web服务中,将所有Enum值以及属性返回给客户端。客户端具有解析所有即将出现的属性的逻辑。像今天一样,有一个 description 属性,明天则有一个新属性,如boolean manadatoryField
,则只需由客户端处理。但是从服务器端来说,如果不从每个枚举中手动创建一个映射并返回该映射,就无法返回带有属性的Enum值。
解决方法
找到了一种使用function ChildComponent ({rooms}) {
const [rooms,setRooms] = useState(rooms);
useEffect(() => {
console.log('props received ' + JSON.stringify(rooms));
},[rooms]);
的简单方法:
向枚举添加注释。
Jackson
为@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
添加一个明确的吸气剂
name
public String getName() {
return this.name();
}
返回可以转换为Map的有效JSON。就我而言,我退还给客户!
回答我自己的问题以帮助他人。如果这是唯一的方法,那么请进行投票。
Arrays.stream(EnumExample.values())
.map(enumExample ->
ImmutableMap.of("name",enumExample.name(),"description",enumExample.description,"value",enumExample.value))
.collect(Collectors.toList())
在不将EnumExample显式转换为Map的情况下,实现此目标的任何最佳方法将受到极大的赞赏。例如,如果添加了任何新属性,则它应该作为新的K,V
对出现在结果映射中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。