/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.time.* ;
import java.time.temporal.* ;
import java.time.format.* ;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
Year startYear = Year.of( 2016 );
Year stopYear = Year.of( 2018 );
YearMonth startYm = YearMonth.from( startYear.atDay( 1 ) );
YearMonth stopYm = YearMonth.from( stopYear.atDay( 1 ) );
int initialCapacity = ( int ) ChronoUnit.MONTHS.between( startYear.atDay( 1 ) , stopYear.atDay( 1 ) );
List< LocalDate > lastMondays = new ArrayList<>( initialCapacity );
DayOfWeek dow = DayOfWeek.MONDAY;
TemporalAdjuster ta = TemporalAdjusters.lastInMonth( dow );
YearMonth ym = startYm;
while ( ym.isBefore( stopYm ) ) {
LocalDate endOfMonth = ym.atEndOfMonth();
if ( endOfMonth.getDayOfWeek().equals( dow ) ) {
lastMondays.add( endOfMonth ); // Collect our last-monday-of-this-month.
}
// Set up the next loop.
ym = ym.plusMonths( 1 );
}
System.
out.
println( lastMondays
);
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgppbXBvcnQgamF2YS50aW1lLiogOwppbXBvcnQgamF2YS50aW1lLnRlbXBvcmFsLiogOwppbXBvcnQgamF2YS50aW1lLmZvcm1hdC4qIDsKCgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoKICAgIFllYXIgc3RhcnRZZWFyID0gWWVhci5vZiggMjAxNiApOwogICAgWWVhciBzdG9wWWVhciA9IFllYXIub2YoIDIwMTggKTsKCiAgICBZZWFyTW9udGggc3RhcnRZbSA9IFllYXJNb250aC5mcm9tKCBzdGFydFllYXIuYXREYXkoIDEgKSApOwogICAgWWVhck1vbnRoIHN0b3BZbSA9IFllYXJNb250aC5mcm9tKCBzdG9wWWVhci5hdERheSggMSApICk7CgogICAgaW50IGluaXRpYWxDYXBhY2l0eSA9ICggaW50ICkgQ2hyb25vVW5pdC5NT05USFMuYmV0d2Vlbiggc3RhcnRZZWFyLmF0RGF5KCAxICkgLCBzdG9wWWVhci5hdERheSggMSApICk7CiAgICBMaXN0PCBMb2NhbERhdGUgPiBsYXN0TW9uZGF5cyA9IG5ldyBBcnJheUxpc3Q8PiggaW5pdGlhbENhcGFjaXR5ICk7CgogICAgRGF5T2ZXZWVrIGRvdyA9IERheU9mV2Vlay5NT05EQVk7CgogICAgVGVtcG9yYWxBZGp1c3RlciB0YSA9IFRlbXBvcmFsQWRqdXN0ZXJzLmxhc3RJbk1vbnRoKCBkb3cgKTsKCiAgICBZZWFyTW9udGggeW0gPSBzdGFydFltOwogICAgd2hpbGUgKCB5bS5pc0JlZm9yZSggc3RvcFltICkgKSB7CiAgICAgICAgTG9jYWxEYXRlIGVuZE9mTW9udGggPSB5bS5hdEVuZE9mTW9udGgoKTsKICAgICAgICBpZiAoIGVuZE9mTW9udGguZ2V0RGF5T2ZXZWVrKCkuZXF1YWxzKCBkb3cgKSApIHsKICAgICAgICAgICAgbGFzdE1vbmRheXMuYWRkKCBlbmRPZk1vbnRoICk7ICAvLyBDb2xsZWN0IG91ciBsYXN0LW1vbmRheS1vZi10aGlzLW1vbnRoLgogICAgICAgIH0KICAgICAgICAvLyBTZXQgdXAgdGhlIG5leHQgbG9vcC4KICAgICAgICB5bSA9IHltLnBsdXNNb250aHMoIDEgKTsKICAgIH0KCiAgICBTeXN0ZW0ub3V0LnByaW50bG4oIGxhc3RNb25kYXlzICk7CiAgICAKCX0KfQ==