It seems that you want, as a starting point, the first full week that starts on a given day of week (Sunday or Monday in your example).
This could be achieved with something like this:
import static java.time.temporal.TemporalAdjusters.nextOrSame;
public static LocalDate getStartingDate(int year, int weekNo, DayOfWeek weekStart) {
//should check that arguments are valid etc.
return Year.of(year).atDay(1).with(nextOrSame(weekStart)).plusDays((weekNo - 1) * 7);
}
or as an alternative:
return Year.of(year).atDay(1).with(ALIGNED_WEEK_OF_YEAR, weekNo).with(nextOrSame(weekStart));
And you call it like this:
import static java.time.DayOfWeek.MONDAY;
import static java.time.DayOfWeek.SUNDAY;
System.out.println(getStartingDate(2016, 1, SUNDAY)); //2016-01-03
System.out.println(getStartingDate(2016, 1, MONDAY)); //2016-01-04