static ImmutableHolidayCalendar of(HolidayCalendarId id, SortedSet<LocalDate> holidays, Set<DayOfWeek> weekendDays) {
ArgChecker.notNull(id, "id");
ArgChecker.notNull(holidays, "holidays");
ArgChecker.notNull(weekendDays, "weekendDays");
int weekends = weekendDays.stream().mapToInt(dow -> 1 << (dow.getValue() - 1)).sum();
int startYear = 0;
int[] lookup = new int[0];
if (holidays.isEmpty()) {
startYear = 0;
lookup = new int[0];
} else {
startYear = holidays.first().getYear();
int endYearExclusive = holidays.last().getYear() + 1;
lookup = buildLookupArray(holidays, weekendDays, startYear, endYearExclusive);
}
return new ImmutableHolidayCalendar(id, weekends, startYear, lookup);
}