在Java中将带有属性的枚举转换为映射
我的枚举如下:在Java中将带有属性的枚举转换为映射,java,enums,java-stream,Java,Enums,Java Stream,我的枚举如下: @AllArgsConstructor public enum EnumExample { VAL1("val1 description", 100), VAL2("val2 description", 200); String description; int value; } [ { "name": "VAL1", "descrip
@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
}
]
现在,我想返回所有带有属性的枚举值,作为映射列表,如下所示:
@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”}
任何不需要手动创建地图的线索或更好的方法都值得赞赏
我的要求:
在Web服务中,将所有枚举值以及属性返回给客户端。客户端具有解析所有属性的逻辑。就像今天有一个description属性,明天如果有新属性,比如
boolean-manadatoryField
,那么它只需要由客户端处理。但是在服务器端,如果不手动创建每个枚举的映射并返回映射,我就无法返回带有属性的枚举值。回答我自己的问题以帮助他人。如果这是唯一的办法,那就投票吧
Arrays.stream(EnumExample.values())
.map(enumExample ->
ImmutableMap.of("name", enumExample.name(),
"description", enumExample.description,
"value", enumExample.value))
.collect(Collectors.toList())
任何在不显式地将EnumExample转换为Map的情况下实现相同功能的最佳方法都是非常值得赞赏的。例如,如果添加了任何新属性,那么它应该作为新的
K,V
对出现在结果映射中。找到了一种使用Jackson
的简单方法:
向枚举添加注释
@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
为name
public String getName() {
return this.name();
}
new ObjectMapper().writeValueAsString(EnumExample.values())
返回可转换为Map的有效JSON。在我的情况下,我返回,这对客户