/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
private List<Student> values = new ArrayList<Student>();
private int id;
public String getName
() { return name
; } public int getId() { return id; }
this.id = id;
this.name = name;
this.location = location;
this.date = date;
}
// Problem occurs even with getters!!
}
}
public static void main
(String[] args
) { List<University.Student> students = new ArrayList<>();
Map
<String, Integer
> locationOrder
= students.
stream().
collect(HashMap::new,
(m, s) -> m.putIfAbsent(s.getName(), m.size()),
(m1, m2) -> m2.keySet().forEach(l -> m1.putIfAbsent(l, m1.size())));
students.
sort(Comparator.
comparingInt((University.
Student s
) -> locationOrder.
get(s.
getName())).
thenComparing(s
-> s.
getId())); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBVbml2ZXJzaXR5IGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKICAgIHByaXZhdGUgTGlzdDxTdHVkZW50PiB2YWx1ZXMgPSBuZXcgQXJyYXlMaXN0PFN0dWRlbnQ+KCk7CgogICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBTdHVkZW50IGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKICAgICAgICBwcml2YXRlIGludCBpZDsKICAgICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogICAgICAgIHByaXZhdGUgU3RyaW5nIGxvY2F0aW9uOwogICAgICAgIHByaXZhdGUgRGF0ZSBkYXRlOwogICAgICAgIAogICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsgcmV0dXJuIG5hbWU7IH0KICAgICAgICBwdWJsaWMgaW50IGdldElkKCkgeyByZXR1cm4gaWQ7IH0KCiAgICAgICAgU3R1ZGVudChpbnQgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgbG9jYXRpb24sIERhdGUgZGF0ZSkgewogICAgICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjsKICAgICAgICAgICAgdGhpcy5kYXRlID0gZGF0ZTsKICAgICAgICB9CgogICAgICAgIC8vIFByb2JsZW0gb2NjdXJzIGV2ZW4gd2l0aCBnZXR0ZXJzISEKfQp9CgpjbGFzcyBJbnZva2VyIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBMaXN0PFVuaXZlcnNpdHkuU3R1ZGVudD4gc3R1ZGVudHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKCiAgICAgICAgTWFwPFN0cmluZywgSW50ZWdlcj4gbG9jYXRpb25PcmRlciA9IHN0dWRlbnRzLnN0cmVhbSgpLmNvbGxlY3QoSGFzaE1hcDo6bmV3LAogICAgICAgICAgICAgICAgKG0sIHMpIC0+IG0ucHV0SWZBYnNlbnQocy5nZXROYW1lKCksIG0uc2l6ZSgpKSwKICAgICAgICAgICAgICAgIChtMSwgbTIpIC0+IG0yLmtleVNldCgpLmZvckVhY2gobCAtPiBtMS5wdXRJZkFic2VudChsLCBtMS5zaXplKCkpKSk7CgogICAgICAgIHN0dWRlbnRzLnNvcnQoQ29tcGFyYXRvci5jb21wYXJpbmdJbnQoKFVuaXZlcnNpdHkuU3R1ZGVudCBzKSAtPiBsb2NhdGlvbk9yZGVyLmdldChzLmdldE5hbWUoKSkpLnRoZW5Db21wYXJpbmcocyAtPiBzLmdldElkKCkpKTsgICAgICAgIAogICAgfQp9Cg==