Java 将枚举存入List集合

本文介绍了一种将Java枚举类型转换为List的方法,并通过具体示例展示了如何创建枚举对应的DTO类,再将枚举值填充到DTO的List中,便于前端展示。

基本思路就是新建一个字段跟枚举一致的类A,然后写个方法,获取枚举的值循环存入到list<A>中,示例如下:

枚举类:

// 套餐枚举
public enum BalanceType {
balance_type0(0, "套餐1"),
balance_type1(1, "套餐2"),
balance_type2(2, "套餐3"),
balance_type3(3, "套餐4"),
balance_type4(4,"套餐5"),
balance_type5(5, "套餐6"),
balance_type6(6, "套餐7"),
balance_type7(7, "套餐8"),
balance_type8(8, "套餐9"),
balance_type9(9, "套餐10"),
balance_type10(10, "套餐11");
private Integer code;
private String desc;
private BalanceType(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
}

首先,根据枚举类创建一个dto出来,如下:(字段根据自己需要定义)

@Data
public class EnumOrderTypeVo implements Serializable{

private static final long serialVersionUID = 1L;

private Integer code; //类型编号
private String desc;  //类型描述
}

 

接下来,我们可以通过java方法来实现将枚举的值存入dto的list中了,方法如下:

public List<EnumOrderTypeVo> getOrderType(String requestId){
           ResultInfoVo rinf = new ResultInfoVo(requestId);
           ArrayList<EnumOrderTypeVo> list = new ArrayList<EnumOrderTypeVo>();
           for(BalanceType type : BalanceType .values()){
                      EnumOrderTypeVo type = new EnumOrderTypeVo();
                      type.setCode(type.getCode());
                      type.setDesc(type.getDesc());
                      list.add(type);
           }
           System.out.println(list.size());
           ListDataVo<ArrayList<EnumOrderTypeVo>>  listData = new ListDataVo<ArrayList<EnumOrderTypeVo>>(list);
           return list;
}

 

至此就完成了将枚举值存入到list以便封装传到前端显示了

<think>我们有一个任务:遍历一个集合(可能是List、Set等),并将每个元素存入Hashtable中。在Hashtable中,我们需要为每个元素指定一个键(key)和一个值(value)。由于问题中没有明确说明键和值如何从集合元素中获取,因此我们需要假设或定义键和值的生成方式。 通常,我们可能有以下几种情况: 1. 集合中的元素本身就是键值对(例如Map.Entry),那么我们可以直接提取键和值。 2. 集合中的元素是单个对象,我们需要根据某种规则生成键(例如,使用对象的某个属性作为键,对象本身作为值;或者使用索引作为键)。 但是,问题中并没有给出具体的集合类型和元素类型。因此,我们需要考虑一般情况。 根据引用[3]和引用[5]中的示例,向Hashtable中添加元素是使用`put(key, value)`方法。 假设我们有一个集合(例如List),我们想将其中的每个元素作为值,并生成一个键(例如,我们可以使用一个递增的整数作为键,或者使用元素的某个属性作为键)。这里,我们以字符串集合为例,使用元素本身作为值,同时我们生成一个序号作为键。 步骤: 1. 创建一个Hashtable对象。 2. 遍历集合(可以使用迭代器、增强for循环等)。 3. 为每个元素生成一个键(这里我们假设键为字符串"key"+索引,索引从0开始;或者如果元素有唯一标识的属性,则使用该属性作为键)。 4. 将键和元素(作为值)放入Hashtable中。 如果集合是Set,那么遍历方式类似。 示例代码(假设集合List<String>): ```java import java.util.Hashtable; import java.util.List; import java.util.ArrayList; public class CollectionToHashtable { public static void main(String[] args) { // 假设我们有一个字符串集合 List<String> list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); list.add("Cherry"); // 创建Hashtable Hashtable<String, String> hashtable = new Hashtable<>(); // 遍历集合存入Hashtable for (int i = 0; i < list.size(); i++) { // 生成键,例如 "key0", "key1", ... String key = "key" + i; String value = list.get(i); hashtable.put(key, value); } // 或者使用增强for循环,但需要额外的索引变量 // 如果使用增强for循环,我们可以这样: // int index = 0; // for (String fruit : list) { // String key = "key" + index; // hashtable.put(key, fruit); // index++; // } // 打印Hashtable以验证 System.out.println(hashtable); } } ``` 如果集合是Set<String>,遍历方式类似,因为Set没有索引,所以我们可以使用一个计数器来生成键: ```java import java.util.Hashtable; import java.util.HashSet; import java.util.Set; public class SetToHashtable { public static void main(String[] args) { Set<String> set = new HashSet<>(); set.add("Dog"); set.add("Cat"); set.add("Bird"); Hashtable<String, String> hashtable = new Hashtable<>(); int index = 0; for (String animal : set) { String key = "key" + index; hashtable.put(key, animal); index++; } System.out.println(hashtable); } } ``` 但是,请注意:由于Set是无序的,所以这样生成的键的顺序并不代表集合中元素的顺序。而且,如果我们使用元素本身来生成键(比如直接使用字符串作为键),那么要注意键的唯一性。如果两个元素相同,那么后放入的会覆盖前一个(因为键相同)。但是在上面的例子中,我们使用索引作为键,所以即使元素相同,键也不同(因为索引不同),所以不会覆盖。但是,在Set中元素本来就是唯一的,所以不会有两个相同的元素。 另外,如果集合中的元素是自定义对象,那么我们需要根据需求选择作为键的属性。例如,假设我们有一个Student类,我们想用学生的id作为键,学生对象作为值: ```java class Student { private String id; private String name; public Student(String id, String name) { this.id = id; this.name = name; } public String getId() { return id; } // 其他方法... } // 然后遍历集合List<Student> studentList = ...; Hashtable<String, Student> hashtable = new Hashtable<>(); for (Student student : studentList) { String key = student.getId(); hashtable.put(key, student); } ``` 注意:Hashtable不允许键或值为null(会抛出NullPointerException),所以在放入之前要确保键和值都不为null。 总结:遍历集合存入Hashtable的关键是确定每个元素的键和值,然后循环调用`put`方法。 根据引用[3]中的示例,添加元素到Hashtable就是使用`Add`方法(在Java中是`put`方法,注意引用[3]可能是C#代码,但Java中对应的是`put`)。在Java中,Hashtable的添加方法是`put(key, value)`。 因此,核心步骤就是遍历集合并为每个元素生成一个键(根据具体需求),然后调用`put`方法。 §§相关问题§§ 1. 如何遍历Map集合并将内容存入Hashtable? 2. 在Java中,Hashtable和HashMap在遍历和存储上有何不同? 3. 如何确保在将集合元素存入Hashtable时键的唯一性?</think>### 遍历集合存入Hashtable的方法 在Java中遍历集合存入Hashtable的步骤如下(以`ArrayList<String>`为例): ```java import java.util.*; public class CollectionToHashtable { public static void main(String[] args) { // 1. 创建集合并添加元素 List<String> list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); list.add("Cherry"); // 2. 创建Hashtable Hashtable<Integer, String> hashtable = new Hashtable<>(); // 3. 遍历集合存入Hashtable int index = 1; // 作为键的计数器 for (String element : list) { hashtable.put(index, element); // 键: 索引, 值: 集合元素 index++; } // 4. 验证结果(遍历Hashtable) Enumeration<Integer> keys = hashtable.keys(); while (keys.hasMoreElements()) { Integer key = keys.nextElement(); System.out.println("Key: " + key + ", Value: " + hashtable.get(key)); } } } ``` #### 关键说明: 1. **键值设计**: - 键(Key):通常使用唯一标识(如自增索引、对象ID等) - 值(Value):集合中的元素 - 示例中使用`Integer`作为键,`String`作为值 2. **遍历方式**: - 集合遍历:使用增强for循环`for (element : collection)` - Hashtable遍历:通过`keys()`获取枚举,再使用`get(key)`取值[^5] 3. **注意事项**: - Hashtable**不允许null键或null值**(会抛出`NullPointerException`) - 键必须唯一,重复键会覆盖旧值 - 若存储自定义对象,需正确重写`hashCode()`和`equals()`方法[^2] #### 自定义对象示例: ```java class Product { private String id; private String name; // 构造方法/getters/setters // 必须重写hashCode()和equals()! } List<Product> products = ...; Hashtable<String, Product> productTable = new Hashtable<>(); for (Product p : products) { productTable.put(p.getId(), p); // 使用产品ID作为键 } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值