通过枚举创建HashSet

时间:2014-04-07 16:05:26

标签: java java-ee

我上课了:

@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是一个月份的列表(jan到12月)我想创建一个带有键的列表(jan到dec)并且每个月都有一个属性,例如int value,那么我想做这个:

int value=mySet.get("July");

如果你理解我的问题,请只是想要一个想法(或其他想法)。

感谢名单。

4 个答案:

答案 0 :(得分:0)

我建议使用一个带有小静态函数的枚举,它根据传入的字符串值的低版本返回月份的序数。这应该相当健壮。此外,您不必使用集合(例如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"));
}

}

答案 1 :(得分:0)

如果您能够使用Java 8,则可以使用新的Date and Time API。具体来说,您会发现有用的新Month枚举:

Month month = Month.JULY;
int value = month.getValue();   // value == 7

如果您想要自己的月/值关联,可以使用EnumMap:

Map<Month, Integer> map = EnumMap<>(Month.class);
map.put(Month.JULY, 42);

答案 2 :(得分:0)

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

public enum MonthAbbreviation
{
    Jan(1),
    Feb(7);

    private final int monthValue;

    private MonthAbbreviation(final int monthValue)
    {
        this.monthValue = monthValue;
    }

    public int getValue()
    {
        return monthValue;
    }
}

public class Main
{
    public static void main(String[] args)
    {
        MonthAbbreviation monthAbbreviation;

        monthAbbreviation = MonthAbbreviation.valueOf("Jan");
        System.out.println(
            "Month: " +
            monthAbbreviation.toString() +
            " value: " +
            monthAbbreviation.getValue());

        monthAbbreviation = MonthAbbreviation.valueOf("Feb");
        System.out.println(
            "Month: " +
            monthAbbreviation.toString() +
            " value: " +
            monthAbbreviation.getValue());
    }
}

答案 3 :(得分:0)

Thanx为你的响应,但是我使用一个Entity类它将是数据库中的一个表,问题是Project_Indicator实体(每个)有12个月(jan到dec)例如 project_indicator p1在10%的20%,直到50%。它就像OneToMany关系所以每个project_indicator都有很多个月的愿望是静态的(12个月),我的想法不是更好地做一个名为Month的实体和与project_indicator做OneToMany关系因为我知道月数;)。在这种情况下,我这样做:

@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;

我如何解决它。 感谢名单。