import java.util.*;
import java.lang.*;
import java.io.*;
import java.time.*;
/* Name of the class has to be "Main" only if the class is public. */
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:
youngest = listOfPersons.stream()
.
max(Comparator.
comparing(p
-> LocalDateTime.
parse(p.
dateOfBirth))).
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(); // ISO8601
}
// 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)); }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnRpbWUuKjsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUgewoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbiB7CgkJCgkJUGVyc29uIHlvdW5nZXN0OwoJCQoJCS8vIHlvdSBjb3VsZCBkbyBzdHJpbmcgY29tcGFyaXNvbiBpZiB5b3Uga25vdyB0aGUgdGltZXpvbmVzIGFyZSBjb25zaXN0ZW50OgoJCQoJCXlvdW5nZXN0ID0gbGlzdE9mUGVyc29ucy5zdHJlYW0oKQoJCSAgICAubWF4KENvbXBhcmF0b3IuY29tcGFyaW5nKHAgLT4gcC5kYXRlT2ZCaXJ0aCkpLmdldCgpOwoJCQoJCVN5c3RlbS5vdXQucHJpbnRsbigieW91bmdlc3QgaXM6ICIgKyB5b3VuZ2VzdC5uYW1lICsgIiAiICsgeW91bmdlc3QuZGF0ZU9mQmlydGgpOwoKICAgICAgICAvLyBvciB5b3UgY291bGQganVzdCBwYXJzZSB0aGUgZGF0ZSwgYSBzYWZlciBvcHRpb246CgkJCgkJeW91bmdlc3QgPSBsaXN0T2ZQZXJzb25zLnN0cmVhbSgpCgkJICAgIC5tYXgoQ29tcGFyYXRvci5jb21wYXJpbmcocCAtPiBMb2NhbERhdGVUaW1lLnBhcnNlKHAuZGF0ZU9mQmlydGgpKSkuZ2V0KCk7CgkJCgkJU3lzdGVtLm91dC5wcmludGxuKCJ5b3VuZ2VzdCBpczogIiArIHlvdW5nZXN0Lm5hbWUgKyAiICIgKyB5b3VuZ2VzdC5kYXRlT2ZCaXJ0aCk7CgkJCgl9CgoJCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gdHlwZXMgZnJvbSBPUDoKCQoJc3RhdGljIGNsYXNzIFBlcnNvbnsKCQlTdHJpbmcgbmFtZTsKCQlTdHJpbmcgaWQ7CgkJU3RyaW5nIGRhdGVPZkJpcnRoOwoJCWludCBzYWxhcnk7Cgl9CgoJc3RhdGljIExpc3QgPFBlcnNvbj4gbGlzdE9mUGVyc29uczsKCgkKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBib3JpbmcgZXhhbXBsZSBkYXRhIGluaXRpYWxpemF0aW9uOgoJCgkvLyBtYWtlIGFuIGlzbyBiaXJ0aGRhdGUgc3RyaW5nIGdpdmVuIGFuIGFnZSAoZm9yIGluaXRpYWxpemluZyBkYXRhKQoJc3RhdGljIFN0cmluZyBmcm9tQWdlIChpbnQgeWVhcnMpIHsKCQlyZXR1cm4gTG9jYWxEYXRlVGltZS5ub3coKS5taW51c1llYXJzKHllYXJzKS50b1N0cmluZygpOyAvLyBJU084NjAxCgl9CgkKCS8vIG1ha2UgdXAgc29tZSBkYXRhCglzdGF0aWMgewoJCWxpc3RPZlBlcnNvbnMgPSBMaXN0Lm9mKAoJCQkvLyBmaW5lIGZvciBleGFtcGxlLCBidXQgaSB3b3VsZG4ndCBpbml0IGxpa2UgdGhpcyBpbiBwcm9kdWN0aW9uCgkJCW5ldyBQZXJzb24oKSB7eyBuYW1lPSJoZWxnYSI7IGRhdGVPZkJpcnRoPWZyb21BZ2UoMjIpOyB9fSwKCQkJbmV3IFBlcnNvbigpIHt7IG5hbWU9Im1vcnRpbWVyIjsgZGF0ZU9mQmlydGg9ZnJvbUFnZSg0OCk7IH19LAoJCQluZXcgUGVyc29uKCkge3sgbmFtZT0iZ2VydHJ1ZGUiOyBkYXRlT2ZCaXJ0aD1mcm9tQWdlKDYpOyB9fSwKCQkJbmV3IFBlcnNvbigpIHt7IG5hbWU9ImplYmVkaWFoIjsgZGF0ZU9mQmlydGg9ZnJvbUFnZSgzOSk7IH19CgkJKTsKCQlsaXN0T2ZQZXJzb25zLmZvckVhY2gocCAtPiBTeXN0ZW0ub3V0LnByaW50bG4ocC5uYW1lICsgJyAnICsgcC5kYXRlT2ZCaXJ0aCkpOwoJfQoKCQp9