Java 如何将多个枚举数据写入单个pojo并将其作为列表返回
是否有一种方法可以使用Java8特性将多个eums数据转换为单个pojo并将其作为列表返回。 我之所以尝试这样做,是因为我在应用程序中有一个从后端从枚举返回下拉值的场景Java 如何将多个枚举数据写入单个pojo并将其作为列表返回,java,java-8,enums,Java,Java 8,Enums,是否有一种方法可以使用Java8特性将多个eums数据转换为单个pojo并将其作为列表返回。 我之所以尝试这样做,是因为我在应用程序中有一个从后端从枚举返回下拉值的场景 public enum TransactionTypeStatuses { NEW("NEW"), ACTIVE("ACTV"), String code; TransactionTypeStatuses(String code) { this.code = code;
public enum TransactionTypeStatuses {
NEW("NEW"),
ACTIVE("ACTV"),
String code;
TransactionTypeStatuses(String code) {
this.code = code;
}
public String code() {
return code;
}
}
public enum MemberTypes {
CENTRAL_BANK("MB01"),
DIRECT_PARTICIPANT("MB02");
private String code;
private MemberTypes(String code) {
this.code =code;
}
public String getCode() {
return code;
}
}
public class EnumDataPojo {
private String id;
private String description;
//setters and getters
}
将枚举数据添加到pojo,并将pojo转换为json响应
public class Application {
public static void main(String[] args) throws JsonProcessingException {
List<EnumDataPojo> response = convertEnumsToPojo(); //contains the data of All enums in "id" and "desscription" format
ObjectMapper mapper = new ObjectMapper();
String response = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(data);
System.out.println(response);
}
stiatic List<EnumDataPojo> convertEnumsToPojo(){
List<EnumDataPojo> dataList = new ArrayList<>();
for(TransactionTypeStatuses enum1: TransactionTypeStatuses.values())
{
EnumDataPojo data1 = new EnumDataPojo ();
data1.setID(enum1.getCode());
data1.setdescription(String.value(enum1));
dataList.add(data1);
}
for(MemberTypes enum2: MemberTypes.values())
{
EnumDataPojo data2 = new EnumDataPojo ();
data2.setID(enum2.getCode());
data2.setdescription(String.value(enum2));
dataList.add(data2);
}
return dataList;
}
}
最新答案
public class EnumDataValues{
private String id;
private String description;
//getters and setters
}
//将每个枚举转换为pojo并将其放入列表中
private List<EnumDataValues> getEnumReferenceData(Class<?> c) {
List<EnumDataValues> referenceDataList = new ArrayList<>();
List enumConstants = Arrays.asList(c.getEnumConstants());
if (!enumConstants.isEmpty()) {
enumConstants.forEach(t -> {
EnumDataValues referenceData = new EnumDataValues();
referenceData.setId(String.valueOf(String.valueOf(t)));
referenceData.setDescription(String.valueOf(t));
referenceDataList.add(referenceData);
});
}
return referenceDataList;
}
私有列表getEnumReferenceData(c类){
List referenceDataList=new ArrayList();
List enumConstants=Arrays.asList(c.getEnumConstants());
如果(!enumConstants.isEmpty()){
enumConstants.forEach(t->{
EnumDataValues referenceData=新EnumDataValues();
referenceData.setId(String.valueOf(String.valueOf(t));
referenceData.setDescription(String.valueOf(t));
referenceDataList.add(referenceData);
});
}
返回引用的催化剂;
}
我认为您的代码不会给出正确的响应。您应该在循环中添加数据以获取每个枚举的所有值
List<EnumDataValues> enum1DataList = new ArrayList<>();
for(Enum1 enum1: enum1.values()){
EnumDataValues data1 = new EnumDataValues ();
data1.setID(enum1.getCode());
data1.setdescription(String.value(enum1));
dataList.add(data1);
}
List enum1data=new ArrayList();
对于(Enum1 Enum1:Enum1.values()){
EnumDataValues data1=新的EnumDataValues();
data1.setID(enum1.getCode());
data1.setdescription(String.value(enum1));
dataList.add(data1);
}
对其他枚举执行相同的操作
更新:
使用Map
作为响应类型并设置枚举数据
Map<String, List<EnumDataValues>> convertEnumsToPojo(){
List<EnumDataPojo> dataList = new ArrayList<>();
for(TransactionTypeStatuses enum1: TransactionTypeStatuses.values())
{
EnumDataPojo data1 = new EnumDataPojo ();
data1.setID(enum1.getCode());
data1.setdescription(String.value(enum1));
dataList.add(data1);
}
List<EnumDataPojo> dataList2 = new ArrayList<>();
for(MemberTypes enum2: MemberTypes.values())
{
EnumDataPojo data2 = new EnumDataPojo ();
data2.setID(enum2.getCode());
data2.setdescription(String.value(enum2));
dataList2.add(data2);
}
Map<String, List<EnumDataValues>> map = new HashMap<>();
map.put("transactionTypeStatuses", enum1DataList);
map.put("memberTypes", enum2DataList);
return map;
}
Map convertEnumsToPojo(){
List dataList=new ArrayList();
对于(TransactionTypeStatuses枚举1:TransactionTypeStatuses.values())
{
EnumDataPojo data1=新的EnumDataPojo();
data1.setID(enum1.getCode());
data1.setdescription(String.value(enum1));
dataList.add(data1);
}
List dataList2=新的ArrayList();
对于(MemberTypes枚举2:MemberTypes.values())
{
EnumDataPojo data2=新的EnumDataPojo();
data2.setID(enum2.getCode());
data2.setdescription(String.value(enum2));
dataList2.add(data2);
}
Map Map=newhashmap();
map.put(“transactionTypeStatuses”,enum1DataList);
map.put(“成员类型”,enum2DataList);
返回图;
}
我不明白您为什么要在中设置相同的对象loop@Eklavya我对实际对象进行了编辑如果您在循环的每次迭代中都设置了数据1,那么每个enumprivate List getEnumReferenceData(类c){List referenceDataList=new ArrayList();List enumConstants=Arrays.asList(c.getEnumConstants())将只获得1个数据;if(!enumConstants.isEmpty()){enumConstants.forEach(t->{ReferenceData ReferenceData=new ReferenceData();ReferenceData.setId(String.valueOf(String.valueOf(t));ReferenceData.setDescription(String.valueOf(t));referenceDataList.add(ReferenceData);}返回referenceDataList;}我所做的是查找,而不是为每个枚举编写循环,尝试维护enumList(Enum1、Enum2..),然后遍历每个枚举并将值分配给pojo。你能建议一下有没有什么办法。谢谢,我不明白你想要什么。我给你的回应机构的解决方案。试着澄清你的问题,并表明你希望得到怎样的回答。编辑和希望现在是清楚的。使用ObjultMappor单独测试响应。如果这个或任何答案已经解决了你的问题,请考虑点击复选标记。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。
Map<String, List<EnumDataValues>> convertEnumsToPojo(){
List<EnumDataPojo> dataList = new ArrayList<>();
for(TransactionTypeStatuses enum1: TransactionTypeStatuses.values())
{
EnumDataPojo data1 = new EnumDataPojo ();
data1.setID(enum1.getCode());
data1.setdescription(String.value(enum1));
dataList.add(data1);
}
List<EnumDataPojo> dataList2 = new ArrayList<>();
for(MemberTypes enum2: MemberTypes.values())
{
EnumDataPojo data2 = new EnumDataPojo ();
data2.setID(enum2.getCode());
data2.setdescription(String.value(enum2));
dataList2.add(data2);
}
Map<String, List<EnumDataValues>> map = new HashMap<>();
map.put("transactionTypeStatuses", enum1DataList);
map.put("memberTypes", enum2DataList);
return map;
}