java - 根据代码中的某些条件优雅地将对象添加到 HashMap
问题描述
我目前正在用 Java 构建日历应用程序。我决定采取的路线是保留一个日历月视图(内置 JavaFX)并更改日期。由于每个月通常有不同的第一天,因此每次月份更改时都必须将日期重新添加到日历中。我决定使用 Hashmap,我根据每月的第一天添加每月的天数。然后我可以在我的代码中使用这个 Hashmap 来做一些事情,改变应用程序端的文本字段等等。
我提交的代码是我如何将日期添加到哈希图中的基本版本,然后打印它们(以显示它们用于测试目的的日期)。
然而,我的方法似乎很啰嗦,如果我有一个包含 10000 个 Hashmap 条目的程序,那么这种方法将不实用。
我的问题如下:是否有更优雅的方法来向 Hashmap 添加条目,其中条目的添加取决于代码中的某些条件?
import java.util.HashMap;
import java.util.Set;
public class MyMonth {
public static void main(String[] args) {
addDaysFromFirstDayOfWeek(list);
int localcount = 1;
Set<Integer> hashset = list.keySet();
for (Integer key : hashset) {
String day = list.get(key);
System.out.println( day + " is day " + localcount + " in the month " );
localcount ++;
}
}
static int count = 1;
static int Daysinmonth = 30;
public static HashMap<Integer, String> list = new HashMap<>(Daysinmonth);
//Week 1
static String Monday1 = "Monday1";
static String Tuesday1 = "Tuesday1";
static String Wednesday1 = "Wednesday1";
static String Thursday1 = "Thursday1";
static String Friday1 = "Friday1";
static String Saturday1 = "Saturday1";
static String Sunday1 = "Sunday1";
// Week 2
static String Monday2 = "Monday2";
static String Tuesday2 = "Tuesday2";
static String Wednesday2 = "Wednesday2";
static String Thursday2 = "Thursday2";
static String Friday2 = "Friday2";
static String Saturday2 = "Saturday2";
static String Sunday2 = "Sunday2";
static String FirstDayOfWeek = Tuesday1;
public static void addDaysFromFirstDayOfWeek(HashMap<Integer,String> hashMap) {
if (FirstDayOfWeek.equals(Monday1)) {
hashMap.put(count, Monday1);
count++;
hashMap.put(count, Tuesday1);
count++;
hashMap.put(count, Wednesday1);
count++;
hashMap.put(count, Thursday1);
count++;
hashMap.put(count, Friday1);
count++;
hashMap.put(count, Saturday1);
count++;
hashMap.put(count, Sunday1);
count++;
addDaysToArrayList(hashMap);
} else if (FirstDayOfWeek.equals(Tuesday1)) {
hashMap.put(count, Tuesday1);
count++;
hashMap.put(count, Wednesday1);
count++;
hashMap.put(count, Thursday1);
count++;
hashMap.put(count, Friday1);
count++;
hashMap.put(count, Saturday1);
count++;
hashMap.put(count, Sunday1);
count++;
addDaysToArrayList(hashMap);
} else if (FirstDayOfWeek.equals(Wednesday1)) {
hashMap.put(count, Wednesday1);
count++;
hashMap.put(count, Thursday1);
count++;
hashMap.put(count, Friday1);
count++;
hashMap.put(count, Saturday1);
count++;
hashMap.put(count, Sunday1);
count++;
addDaysToArrayList(hashMap);
} else if(FirstDayOfWeek.equals(Thursday1)){
hashMap.put(count, Thursday1);
count++;
hashMap.put(count, Friday1);
count++;
hashMap.put(count, Saturday1);
count++;
hashMap.put(count, Sunday1);
count++;
addDaysToArrayList(hashMap);
} else if(FirstDayOfWeek.equals(Friday1)){
hashMap.put(count, Friday1);
count++;
hashMap.put(count, Saturday1);
count++;
hashMap.put(count, Sunday1);
count++;
addDaysToArrayList(hashMap);
} else if(FirstDayOfWeek.equals(Saturday1)){
hashMap.put(count, Saturday1);
count++;
hashMap.put(count, Sunday1);
count++;
addDaysToArrayList(hashMap);
} else if(FirstDayOfWeek.equals(Sunday1)){
hashMap.put(count, Sunday1);
count++;
addDaysToArrayList(hashMap);
}
}
public static void addDaysToArrayList(HashMap<Integer,String> hashMap){
hashMap.put(count,Monday2);
count++;
hashMap.put(count,Tuesday2);
count++;
hashMap.put(count,Wednesday2);
count++;
hashMap.put(count,Thursday2);
count++;
hashMap.put(count,Friday2);
count++;
hashMap.put(count,Saturday2);
count++;
hashMap.put(count,Sunday2);
count++;
}
}
解决方案
我会使用流来完成这项工作。以下是为一年中的所有月/日构建地图的方法示例:
Map<Month, Map<Integer, DayOfWeek>> getMonthDaysOfWeek(int year) {
return EnumSet.allOf(Month.class).stream()
.map(month -> Year.of(year).atMonth(month))
.collect(Collectors.toMap(
YearMonth::getMonth,
yearMonth -> IntStream.rangeClosed(1, yearMonth.lengthOfMonth()).boxed()
.collect(Collectors.toMap(Function.identity(),
day -> yearMonth.atDay(day).getDayOfWeek()))));
}
推荐阅读
- amazon-web-services - 与 aws-cli s3 同步的文件模式匹配
- python - Python通过串口将数据写入Vellemank8090
- c# - 如何通过标识符(名称,Uid ...)访问用户控件?
- mysql - 查询以查找与同事超过 x 次的员工及其部门对
- java - 如果 db 中的布尔值不为 0,则相同的查询不返回任何内容
- r - 尝试创建一个函数,您可以在最终的 excel 电子表格中合并列中的行
- amazon-dynamodb - DynamoDB 中的多表与复合键
- mysql - SpringApplication.run() 加载整个数据库
- java - springboot/hibernate 查询结果花费了太多时间
- csv - 使用 appendRow 将 csv 数据放入表格中的单独列中