我上课了:
@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");
如果你理解我的问题,请只是想要一个想法(或其他想法)。
感谢名单。
答案 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;
我如何解决它。 感谢名单。