Я хочу преобразовать список дат в карту, где месяц является ключом, а значения - это список дат с данным месяцем.Convert List <Date> to Map <месяц, список <Date>>
У меня есть следующий объект месяца, который в основном удерживает месяц и год, поэтому каждый месяц уникален.
public class Month implements Serializable, Comparable<Month> {
protected int year;
protected int month;
public Month(Date dag) {
Calendar cal = Calendar.getInstance();
cal.setTime(dag);
this.month = cal.get(Calendar.MONTH)+1; //zerobased to onebased
this.year = cal.get(Calendar.YEAR);
}
}
А теперь, учитывая список дат я пытаюсь сделать что-то вроде этого:
public void addLedigeDage(List<Date> newLedigeDage) {
List<Date> datesPerMonth = new ArrayList<>();
Calendar cal = Calendar.getInstance();
for (Date date : newLedigeDage) {
cal.setTime(date);
Month month = new Month(date);
datesPerMonth = findAllDatesForGivenMonth(newLedigeDage, cal.get(Calendar.MONTH));
ledigeDageMap.put(month, datesPerMonth);
}
}
private List<Date> findAllDatesForGivenMonth(List<Date> newLedigeDage, int month) {
Calendar cal = Calendar.getInstance();
List<Date> datesForGivenMonth = new ArrayList<>();
for (Date date : newLedigeDage) {
if (cal.get(Calendar.MONTH) == month) {
datesForGivenMonth.add(date);
}
}
return datesForGivenMonth;
}
Но код не является чистым и не является оптимальным, так как я перебирать те же даты слишком много раз.
Я использую java 1.7 и имею Guava. Я не могу использовать Multimap в этом случае из-за некоторых проблем с архитектурой в моем приложении.
Любые предложения относительно того, как оптимизировать это и сделать его чистым?
Вы хотите проверить код? >> http://codereview.stackexchange.com/ – Tom
Нет, я не хочу просматривать код. Я ищу правильный чистый способ сделать это, и я только что опубликовал то, что я пробовал до сих пор. –
И вы хотите, чтобы кто-то посмотрел на него и предложил лучшие решения. Это одна из целей «Обзор кода». – Tom