import java.util.*;
import java.lang.*;
import java.io.*;
import java.time.*;
import java.time.format.*;
class Ideone {
Person youngest;
// you could do string comparison if you know the timezones are consistent:
youngest = listOfPersons.stream()
.
max(Comparator.
comparing(p
-> p.
dateOfBirth)).
get();
System.
out.
println("youngest is: " + youngest.
name + " " + youngest.
dateOfBirth);
// or you could just parse the date, a safer option (choose ISO_INSTANT or ISO_DATE_TIME depending on needs):
youngest = listOfPersons.stream()
.
max(Comparator.
comparing(p
-> LocalDateTime.
parse(p.
dateOfBirth, DateTimeFormatter.
ISO_DATE_TIME))).
get();
System.
out.
println("youngest is: " + youngest.
name + " " + youngest.
dateOfBirth);
}
//------------------------------------
// types from OP:
static class Person{
int salary;
}
static List <Person
> listOfPersons
;
//------------------------------------
// boring example data initialization:
// make an iso birthdate string given an age (for initializing data)
static String fromAge
(int years
) { //return LocalDateTime.now().minusYears(years).toString();
// add zone to emulate OP's input:
return LocalDateTime.now().minusYears(years).toString() + 'Z';
}
// make up some data
static {
// fine for example, but i wouldn't init like this in production
new Person() {{ name="helga"; dateOfBirth=fromAge(22); }},
new Person() {{ name="mortimer"; dateOfBirth=fromAge(48); }},
new Person() {{ name="gertrude"; dateOfBirth=fromAge(6); }},
new Person() {{ name="jebediah"; dateOfBirth=fromAge(39); }}
);
listOfPersons.
forEach(p
-> System.
out.
println(p.
name + ' ' + p.
dateOfBirth)); }
}
IAppbXBvcnQgamF2YS51dGlsLio7CmltcG9ydCBqYXZhLmxhbmcuKjsKaW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudGltZS4qOwppbXBvcnQgamF2YS50aW1lLmZvcm1hdC4qOwoKY2xhc3MgSWRlb25lIHsKCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24gewoJCQoJCVBlcnNvbiB5b3VuZ2VzdDsKCQkKCQkvLyB5b3UgY291bGQgZG8gc3RyaW5nIGNvbXBhcmlzb24gaWYgeW91IGtub3cgdGhlIHRpbWV6b25lcyBhcmUgY29uc2lzdGVudDoKCQkKCQl5b3VuZ2VzdCA9IGxpc3RPZlBlcnNvbnMuc3RyZWFtKCkKCQkgICAgLm1heChDb21wYXJhdG9yLmNvbXBhcmluZyhwIC0+IHAuZGF0ZU9mQmlydGgpKS5nZXQoKTsKCQkKCQlTeXN0ZW0ub3V0LnByaW50bG4oInlvdW5nZXN0IGlzOiAiICsgeW91bmdlc3QubmFtZSArICIgIiArIHlvdW5nZXN0LmRhdGVPZkJpcnRoKTsKCiAgICAgICAgLy8gb3IgeW91IGNvdWxkIGp1c3QgcGFyc2UgdGhlIGRhdGUsIGEgc2FmZXIgb3B0aW9uIChjaG9vc2UgSVNPX0lOU1RBTlQgb3IgSVNPX0RBVEVfVElNRSBkZXBlbmRpbmcgb24gbmVlZHMpOgoJCQoJCXlvdW5nZXN0ID0gbGlzdE9mUGVyc29ucy5zdHJlYW0oKQoJCSAgICAubWF4KENvbXBhcmF0b3IuY29tcGFyaW5nKHAgLT4gTG9jYWxEYXRlVGltZS5wYXJzZShwLmRhdGVPZkJpcnRoLCBEYXRlVGltZUZvcm1hdHRlci5JU09fREFURV9USU1FKSkpLmdldCgpOwoJCQoJCVN5c3RlbS5vdXQucHJpbnRsbigieW91bmdlc3QgaXM6ICIgKyB5b3VuZ2VzdC5uYW1lICsgIiAiICsgeW91bmdlc3QuZGF0ZU9mQmlydGgpOwoJCQoJfQoKCQoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCS8vIHR5cGVzIGZyb20gT1A6CgkKCXN0YXRpYyBjbGFzcyBQZXJzb257CgkJU3RyaW5nIG5hbWU7CgkJU3RyaW5nIGlkOwoJCVN0cmluZyBkYXRlT2ZCaXJ0aDsKCQlpbnQgc2FsYXJ5OwoJfQoKCXN0YXRpYyBMaXN0IDxQZXJzb24+IGxpc3RPZlBlcnNvbnM7CgoJCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gYm9yaW5nIGV4YW1wbGUgZGF0YSBpbml0aWFsaXphdGlvbjoKCQoJLy8gbWFrZSBhbiBpc28gYmlydGhkYXRlIHN0cmluZyBnaXZlbiBhbiBhZ2UgKGZvciBpbml0aWFsaXppbmcgZGF0YSkKCXN0YXRpYyBTdHJpbmcgZnJvbUFnZSAoaW50IHllYXJzKSB7CgkJLy9yZXR1cm4gTG9jYWxEYXRlVGltZS5ub3coKS5taW51c1llYXJzKHllYXJzKS50b1N0cmluZygpOwoJCS8vIGFkZCB6b25lIHRvIGVtdWxhdGUgT1AncyBpbnB1dDoKCQlyZXR1cm4gTG9jYWxEYXRlVGltZS5ub3coKS5taW51c1llYXJzKHllYXJzKS50b1N0cmluZygpICsgJ1onOwoJfQoJCgkvLyBtYWtlIHVwIHNvbWUgZGF0YQoJc3RhdGljIHsKCQlsaXN0T2ZQZXJzb25zID0gTGlzdC5vZigKCQkJLy8gZmluZSBmb3IgZXhhbXBsZSwgYnV0IGkgd291bGRuJ3QgaW5pdCBsaWtlIHRoaXMgaW4gcHJvZHVjdGlvbgoJCQluZXcgUGVyc29uKCkge3sgbmFtZT0iaGVsZ2EiOyBkYXRlT2ZCaXJ0aD1mcm9tQWdlKDIyKTsgfX0sCgkJCW5ldyBQZXJzb24oKSB7eyBuYW1lPSJtb3J0aW1lciI7IGRhdGVPZkJpcnRoPWZyb21BZ2UoNDgpOyB9fSwKCQkJbmV3IFBlcnNvbigpIHt7IG5hbWU9ImdlcnRydWRlIjsgZGF0ZU9mQmlydGg9ZnJvbUFnZSg2KTsgfX0sCgkJCW5ldyBQZXJzb24oKSB7eyBuYW1lPSJqZWJlZGlhaCI7IGRhdGVPZkJpcnRoPWZyb21BZ2UoMzkpOyB9fQoJCSk7CgkJbGlzdE9mUGVyc29ucy5mb3JFYWNoKHAgLT4gU3lzdGVtLm91dC5wcmludGxuKHAubmFtZSArICcgJyArIHAuZGF0ZU9mQmlydGgpKTsKCX0KCgkKfSA=