package com.levelup.java.date.query; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.Month; import java.time.temporal.ChronoField; import java.time.temporal.TemporalAccessor; import java.time.temporal.TemporalQuery; import java.util.List; import java.util.stream.Collectors; import org.junit.Test; import com.google.common.collect.Lists; /** * This java example will demonstrate using Java 8 * TemporalQuery. * * @author Justin Musgrove * @see <a href='http://www.leveluplunch.com/java/examples/workday-temporal-query-java8/'>Work day query</a> */ public class WorkDayQuery implements TemporalQuery<Boolean>{ /* * * (non-Javadoc) * @see java.time.temporal.TemporalQuery#queryFrom(java.time.temporal.TemporalAccessor) */ @Override public Boolean queryFrom(TemporalAccessor date) { int dayOfWeekNumber = date.get(ChronoField.DAY_OF_WEEK); DayOfWeek dayOfWeek = DayOfWeek.of(dayOfWeekNumber); if (dayOfWeek == DayOfWeek.SATURDAY || dayOfWeek == DayOfWeek.SUNDAY) { return Boolean.FALSE; } else { return Boolean.TRUE; } } @Test public void work_day_query () { LocalDate date = LocalDate.of(2014, Month.FEBRUARY, 02); // Sunday Boolean workDay = date.query(new WorkDayQuery()); assertFalse(workDay); } @Test public void work_day_query_lambda () { List<LocalDate> randomDays = Lists.newArrayList( LocalDate.of(2014, Month.FEBRUARY, 16), // Sunday LocalDate.of(2014, Month.APRIL, 19), // Saturday LocalDate.of(2014, Month.MAY, 30), // Friday LocalDate.of(2014, Month.DECEMBER, 12), // Friday LocalDate.of(2014, Month.DECEMBER, 17) // Wednesday ); // filter work days from random days List<LocalDate> workDays = randomDays .stream() .filter(p -> p.query(new WorkDayQuery())) .collect(Collectors.toList()); assertEquals(3, workDays.size()); } }