private List<Date> generateDatesForFlowers() { int desiredFlowersPerMonth = girl.getDesiredFlowersPerMonth(); List<Date> importantDates = Lists.newArrayList(girl.getImportantAnniversariesDates().values()); if (desiredFlowersPerMonth <= importantDates.size()) { return importantDates; } Date now = new Date(); Date monthAfter = new Date(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(30)); List<Date> flowersDates = Lists.newArrayList(); final Random random = new Random(); for (int i = desiredFlowersPerMonth; i-- > 0; ) { int dayOfMonth = random.nextInt(30 + 1); Date potentialNewDate = new Date(now.getTime() + TimeUnit.DAYS.toMillis(dayOfMonth)); while (flowersDates.contains(potentialNewDate)) { dayOfMonth = random.nextInt(30 + 1); potentialNewDate = new Date(now.getTime() + TimeUnit.DAYS.toMillis(dayOfMonth)); } flowersDates.add(potentialNewDate); } return flowersDates; }