Java 通过枚举创建哈希集

Java 通过枚举创建哈希集,java,jakarta-ee,Java,Jakarta Ee,我有课: @Entity @Table(name = "PROJECT_INDICATOR") public class Project_Indicator { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; @NotNull @ManyToOne private Indicator indicator; @NotNull @ManyToOn

我有课:

@Entity
@Table(name = "PROJECT_INDICATOR")
public class Project_Indicator {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    @NotNull
    @ManyToOne
    private Indicator indicator;
    @NotNull
    @ManyToOne
    private Project project;
    @NotNull
    private int year;
    // here I want create List (HashSet) with enumeration of months
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public Indicator getIndicator() {
        return indicator;
    }
    public void setIndicator(Indicator indicator) {
        this.indicator = indicator;
    }
    public Project getProject() {
        return project;
    }
    public void setProject(Project project) {
        this.project = project;
    }
    public int getYear() {
        return year;
    }
    public void setYear(int year) {
        this.year = year;
    }

}
此Project_Indicator类必须包含一个属性wish is a List of month(一月到十二月)我想创建一个带有关键字are(一月到十二月)的列表,每个月都有一个属性,例如int value,然后我想执行以下操作:

int value=mySet.get("July");
如果你理解我的问题,请告诉我一个想法(或其他想法)


Thanx.

我建议使用带有小静态函数的枚举,该函数根据传入字符串值的小写版本返回月份的序号。这应该是相当稳健的。此外,您不必使用集合(如HashSet)来实现它。您不需要任何导入语句。下面是一些示例代码来显示这个概念

public class MonthNumbers {

public enum months {
    JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;

    public static int getMonth(String monthName) {
        for(months m : months.values()) {
            if(m.toString().toLowerCase().equals(monthName.toLowerCase().trim())) {
                return m.ordinal();
            }
        }
        return -1;
    }
}


public static void main(String[] args) {
    System.out.println("January is " + months.getMonth("january"));
System.out.println("February is " + months.getMonth("February"));
System.out.println("March is " + months.getMonth("mArCh"));
System.out.println("April is " + months.getMonth("APRIL"));
}

}

如果您能够使用Java 8,则可以使用新的。具体而言,您会发现新的枚举非常有用:

Month month = Month.JULY;
int value = month.getValue();   // value == 7
如果您想要自己的月/值关联,可以使用EnumMap:

Map<Month, Integer> map = EnumMap<>(Month.class);
map.put(Month.JULY, 42);
Map Map=EnumMap(Month.class);
地图放置(42年7月);

这只是上面Scott Shipp中枚举的一个软变体。 如果要为每个月分配一个特定的数字,可以使用枚举构造函数。 (该示例使用7表示2月,表明您选择的数字与实现无关)


Thanx用于您的回复,但我使用的是实体类,它将是数据库中的一个表。问题是项目指标实体(每个实体)有12个月(1月到12月)例如 项目指标p1在1月为20%,在2月为10%。。。直到12月50%。它喜欢一个多月的关系,因此每个项目\ u指标都有多个月的愿望是静态的(12个月),我的想法是最好做一个名为month的实体,并与项目\ u指标建立一个多月的关系,因为我知道月数;)。在这种情况下,我会这样做:

@Entity
 @Table(name = "PROJECT_INDICATOR")
   public class Project_Indicator {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@NotNull
@ManyToOne
private Indicator indicator;
@NotNull
@ManyToOne
private Project project;
@NotNull
private int year;
public enum Months {
    JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;

    public static int getMonth(String monthName) {
        for(Months m : Months.values()) {
            if(m.toString().toLowerCase().equals(monthName.toLowerCase().trim())) {
                return m.ordinal();
            }
        }
        return -1;
    }
}
在这里,当我从实体生成表时,它们不会生成,并且我没有错误消息,我认为问题是

private Map<Months,Integer> months;
私人地图月;
我如何解决它。 塔克斯

private Map<Months,Integer> months;