如何从Java中的枚举值返回具有所有属性的枚举对象
我有一个场景以json形式返回状态列表,该列表在status Enum中可用,我的Enum如下所示 例如:-如何从Java中的枚举值返回具有所有属性的枚举对象,java,enums,Java,Enums,我有一个场景以json形式返回状态列表,该列表在status Enum中可用,我的Enum如下所示 例如:- public enum Status { CREATED("100", "CREATED"), UPDATED("200", "UPDATED"), DELETED("300", "DELETED"); private final String id; private final String name; private Status(String id, String name)
public enum Status {
CREATED("100", "CREATED"), UPDATED("200", "UPDATED"), DELETED("300", "DELETED");
private final String id;
private final String name;
private Status(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
@Override
public String toString() {
return name;
}
public List<Map<String, String>> lookup() {
List<Map<String, String>> list = new ArrayList<>();
for (Status s : values()) {
Map<String, String> map = new HashMap<>();
map.put("ID", s.getId());
map.put("name", s.getName());
list.add(map);
}
return list;
}
}
公共枚举状态{
创建(“100”、“创建”)、更新(“200”、“更新”)、删除(“300”、“删除”);
私有最终字符串id;
私有最终字符串名;
私有状态(字符串id、字符串名称){
this.id=id;
this.name=名称;
}
公共字符串getId(){
返回id;
}
公共字符串getName(){
返回名称;
}
@凌驾
公共字符串toString(){
返回名称;
}
公共列表查找(){
列表=新的ArrayList();
对于(状态s:values()){
Map Map=newhashmap();
map.put(“ID”,s.getId());
map.put(“name”,s.getName());
列表。添加(地图);
}
退货清单;
}
}
需要这样的输出:
[{id:“100”,名称:“已创建”},{id:“200”,名称:“已更新”}……]
我已经编写了一个包含映射列表的查找方法来构建响应,是否有更好的方法或实用程序来将枚举转换为包含枚举中所有可用属性的对象
有没有更好的办法
Arrays.stream( Status.class.getEnumConstants() )
.map( e -> Map.of( "id", e.getId(), "name", e.getName() )
.collect( Collectors.toList() );
我在移动设备上,无法进行测试,但您得到了一个大致的想法您可以使用一个用于JSON序列化的库,如或,并在其中实现自定义序列化 例如: 这将产生: {"ID":"100","name":"CREATED"}
{“ID”:“100”,“name”:“CREATED”}您可以使用Jackson转换为JSON。只需包含@JsonFormat(shape=shape.OBJECT)
在枚举声明中。这将给出结果。您可以在Java8中使用流API。并使用平行于良好性能
List<Map<String, String>> list = Stream.of(Status.values()).parallel().map(temp -> {
Map<String, String> obj = new HashMap<String, String>();
obj.put("id", temp.getId());
obj.put("name", temp.getName());
return obj;
}).collect(Collectors.toList());
List List=Stream.of(Status.values()).parallel().map(temp->{
Map obj=新的HashMap();
对象put(“id”,temp.getId());
obj.put(“name”,temp.getName());
返回obj;
}).collect(Collectors.toList());
在这里使用parallel()
只会降低性能-参见例如..@TomaszLinkowski真的,让我来做测试。我没有使用太多的流API。谢谢你的评论,不客气。请记住,要正确运行这样一个微基准,您需要使用以下内容。
{"ID":"100","name":"CREATED"}
List<Map<String, String>> list = Stream.of(Status.values()).parallel().map(temp -> {
Map<String, String> obj = new HashMap<String, String>();
obj.put("id", temp.getId());
obj.put("name", temp.getName());
return obj;
}).collect(Collectors.toList());