/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.time.temporal.ChronoUnit;
import java.util.stream.Collectors;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
List
<Entry
> list
= Arrays.
asList(new Entry
(sdf.
parse("2011-03-21 09:00"),
"VALUE1") , new Entry(sdf.parse("2011-03-21 09:00"), "VALUE2")
, new Entry(sdf.parse("2011-03-22 09:00"), "VALUE3")
, new Entry(sdf.parse("2011-03-22 09:00"), "VALUE4")
, new Entry(sdf.parse("2011-03-21 09:00"), "VALUE5")
);
Map
<Date, List
<Entry
>> entries
= list.
stream().
collect(Collectors.
groupingBy(e
-> // easier way to truncate the date
Date.
from(e.
getDate().
toInstant().
truncatedTo(ChronoUnit.
DAYS)),
TreeMap::new, Collectors.
toList()) //added treemap to sort by keys );
//--- printing---
format.
setTimeZone(TimeZone.
getTimeZone("GMT")); // using GMT timezone to avoid inconsistencies when printing
entries.forEach((date, entries1) -> {
System.
out.
println(format.
format(date
)); entries1.
forEach(entry
-> System.
out.
println("\t" + entry.
getValue())); });
}
}
class Entry {
this.date = date;
this.value = value;
}
return date;
}
return value;
}
@Override
return "Entry{" +
"date=" + date +
", value='" + value + '\'' +
'}';
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKaW1wb3J0IGphdmEudGltZS50ZW1wb3JhbC5DaHJvbm9Vbml0OwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwoKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb257CiAgICAgICAgCiAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBzZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eS1NTS1kZCBISDptbSIpOwogICAgICAgIExpc3Q8RW50cnk+IGxpc3QgPSBBcnJheXMuYXNMaXN0KG5ldyBFbnRyeShzZGYucGFyc2UoIjIwMTEtMDMtMjEgMDk6MDAiKSwgIlZBTFVFMSIpCiAgICAgICAgICAgICAgICAsIG5ldyBFbnRyeShzZGYucGFyc2UoIjIwMTEtMDMtMjEgMDk6MDAiKSwgIlZBTFVFMiIpCiAgICAgICAgICAgICAgICAsIG5ldyBFbnRyeShzZGYucGFyc2UoIjIwMTEtMDMtMjIgMDk6MDAiKSwgIlZBTFVFMyIpCiAgICAgICAgICAgICAgICAsIG5ldyBFbnRyeShzZGYucGFyc2UoIjIwMTEtMDMtMjIgMDk6MDAiKSwgIlZBTFVFNCIpCiAgICAgICAgICAgICAgICAsIG5ldyBFbnRyeShzZGYucGFyc2UoIjIwMTEtMDMtMjEgMDk6MDAiKSwgIlZBTFVFNSIpCiAgICAgICAgKTsKCiAgICAgICAgTWFwPERhdGUsIExpc3Q8RW50cnk+PiBlbnRyaWVzID0gbGlzdC5zdHJlYW0oKS5jb2xsZWN0KENvbGxlY3RvcnMuZ3JvdXBpbmdCeShlIC0+CiAgICAgICAgICAgICAgICAvLyBlYXNpZXIgd2F5IHRvIHRydW5jYXRlIHRoZSBkYXRlCiAgICAgICAgICAgICAgICBEYXRlLmZyb20oZS5nZXREYXRlKCkudG9JbnN0YW50KCkudHJ1bmNhdGVkVG8oQ2hyb25vVW5pdC5EQVlTKSksVHJlZU1hcDo6bmV3LCBDb2xsZWN0b3JzLnRvTGlzdCgpKSAvL2FkZGVkIHRyZWVtYXAgdG8gc29ydCBieSBrZXlzCiAgICAgICAgKTsKICAgICAgICAKICAgICAgICAvLy0tLSBwcmludGluZy0tLQogICAgICAgIAogICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQiKTsKICAgICAgICBmb3JtYXQuc2V0VGltZVpvbmUoVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCIpKTsgICAgIC8vIHVzaW5nIEdNVCB0aW1lem9uZSB0byBhdm9pZCBpbmNvbnNpc3RlbmNpZXMgd2hlbiBwcmludGluZwoKICAgICAgICBlbnRyaWVzLmZvckVhY2goKGRhdGUsIGVudHJpZXMxKSAtPiB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXQuZm9ybWF0KGRhdGUpKTsKICAgICAgICAgICAgZW50cmllczEuZm9yRWFjaChlbnRyeSAtPiBTeXN0ZW0ub3V0LnByaW50bG4oIlx0IiArIGVudHJ5LmdldFZhbHVlKCkpKTsKICAgICAgICB9KTsKICAgIH0KfQoKY2xhc3MgRW50cnkgewogICAgcHJpdmF0ZSBmaW5hbCBEYXRlIGRhdGU7CiAgICBwcml2YXRlIGZpbmFsIFN0cmluZyB2YWx1ZTsKCiAgICBwdWJsaWMgRW50cnkoRGF0ZSBkYXRlLCBTdHJpbmcgdmFsdWUpIHsKICAgICAgICB0aGlzLmRhdGUgPSBkYXRlOwogICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgRGF0ZSBnZXREYXRlKCkgewogICAgICAgIHJldHVybiBkYXRlOwogICAgfQoKICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICByZXR1cm4gIkVudHJ5eyIgKwogICAgICAgICAgICAgICAgImRhdGU9IiArIGRhdGUgKwogICAgICAgICAgICAgICAgIiwgdmFsdWU9JyIgKyB2YWx1ZSArICdcJycgKwogICAgICAgICAgICAgICAgJ30nOwogICAgfQp9