import java.util.*;
import java.util.stream.*;
class Scratch {
public static void main
(String[] args
) { final List
<ExampleObject
> objects
= List.
of( new ExampleObject(1, "Real Name", "Real Value"),
new ExampleObject(2, "Duplicate Name", "Duplicate Value"),
new ExampleObject(3, "Duplicate Name", "Duplicate Value"),
new ExampleObject(4, "Duplicate Name", "Duplicate Value"),
new ExampleObject(5, "Real Name 2", "Real Value 2"),
new ExampleObject(6, "Duplicate Name 2", "Duplicate Value 2"),
new ExampleObject(7, "Duplicate Name 2", "Duplicate Value 2"));
final TreeSet<ExampleObject> deduped = new TreeSet<>(
.thenComparing(ExampleObject::getValue));
deduped.addAll(objects);
.stream()
.
collect(Collectors.
joining(System.
lineSeparator()))); }
}
class ExampleObject {
final int id;
this.id = id;
this.name = name;
this.value = value;
}
public int getId() {
return id;
}
return name;
}
return value;
}
@Override
public boolean equals
(Object o
) { if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ExampleObject that = (ExampleObject) o;
return id == that.id;
}
@Override
public int hashCode() {
return Objects.hash(id);
}
@Override
return "ExampleObject{" +
"id=" + id +
", name='" + name + '\'' +
", value='" + value + '\'' +
'}';
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS4qOwoKY2xhc3MgU2NyYXRjaCB7CiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgZmluYWwgTGlzdDxFeGFtcGxlT2JqZWN0PiBvYmplY3RzID0gTGlzdC5vZigKICAgICAgICBuZXcgRXhhbXBsZU9iamVjdCgxLCAiUmVhbCBOYW1lIiwgIlJlYWwgVmFsdWUiKSwKICAgICAgICBuZXcgRXhhbXBsZU9iamVjdCgyLCAiRHVwbGljYXRlIE5hbWUiLCAiRHVwbGljYXRlIFZhbHVlIiksCiAgICAgICAgbmV3IEV4YW1wbGVPYmplY3QoMywgIkR1cGxpY2F0ZSBOYW1lIiwgIkR1cGxpY2F0ZSBWYWx1ZSIpLAogICAgICAgIG5ldyBFeGFtcGxlT2JqZWN0KDQsICJEdXBsaWNhdGUgTmFtZSIsICJEdXBsaWNhdGUgVmFsdWUiKSwKICAgICAgICBuZXcgRXhhbXBsZU9iamVjdCg1LCAiUmVhbCBOYW1lIDIiLCAiUmVhbCBWYWx1ZSAyIiksCiAgICAgICAgbmV3IEV4YW1wbGVPYmplY3QoNiwgIkR1cGxpY2F0ZSBOYW1lIDIiLCAiRHVwbGljYXRlIFZhbHVlIDIiKSwKICAgICAgICBuZXcgRXhhbXBsZU9iamVjdCg3LCAiRHVwbGljYXRlIE5hbWUgMiIsICJEdXBsaWNhdGUgVmFsdWUgMiIpKTsKICAgIGZpbmFsIFRyZWVTZXQ8RXhhbXBsZU9iamVjdD4gZGVkdXBlZCA9IG5ldyBUcmVlU2V0PD4oCiAgICAgICAgICAgIENvbXBhcmF0b3IuY29tcGFyaW5nKEV4YW1wbGVPYmplY3Q6OmdldE5hbWUpCiAgICAgICAgICAgICAgICAudGhlbkNvbXBhcmluZyhFeGFtcGxlT2JqZWN0OjpnZXRWYWx1ZSkpOwogICAgZGVkdXBlZC5hZGRBbGwob2JqZWN0cyk7CiAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGVkdXBlZAogICAgICAgIC5zdHJlYW0oKQogICAgICAgIC5tYXAoT2JqZWN0Ojp0b1N0cmluZykKICAgICAgICAuY29sbGVjdChDb2xsZWN0b3JzLmpvaW5pbmcoU3lzdGVtLmxpbmVTZXBhcmF0b3IoKSkpKTsKICB9Cn0KCmNsYXNzIEV4YW1wbGVPYmplY3QgewogIGZpbmFsIGludCBpZDsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBTdHJpbmcgdmFsdWU7CgogIHB1YmxpYyBFeGFtcGxlT2JqZWN0KGludCBpZCwgU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgewogICAgdGhpcy5pZCA9IGlkOwogICAgdGhpcy5uYW1lID0gbmFtZTsKICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKICB9CgogIHB1YmxpYyBpbnQgZ2V0SWQoKSB7CiAgICByZXR1cm4gaWQ7CiAgfQoKICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBAT3ZlcnJpZGUKICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKICAgIGlmICh0aGlzID09IG8pIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAobyA9PSBudWxsIHx8IGdldENsYXNzKCkgIT0gby5nZXRDbGFzcygpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIEV4YW1wbGVPYmplY3QgdGhhdCA9IChFeGFtcGxlT2JqZWN0KSBvOwogICAgcmV0dXJuIGlkID09IHRoYXQuaWQ7CiAgfQoKICBAT3ZlcnJpZGUKICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgcmV0dXJuIE9iamVjdHMuaGFzaChpZCk7CiAgfQoKICBAT3ZlcnJpZGUKICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICJFeGFtcGxlT2JqZWN0eyIgKwogICAgICAgICJpZD0iICsgaWQgKwogICAgICAgICIsIG5hbWU9JyIgKyBuYW1lICsgJ1wnJyArCiAgICAgICAgIiwgdmFsdWU9JyIgKyB2YWx1ZSArICdcJycgKwogICAgICAgICd9JzsKICB9Cn0=
ExampleObject{id=2, name='Duplicate Name', value='Duplicate Value'}
ExampleObject{id=6, name='Duplicate Name 2', value='Duplicate Value 2'}
ExampleObject{id=1, name='Real Name', value='Real Value'}
ExampleObject{id=5, name='Real Name 2', value='Real Value 2'}