fork download
  1. import java.util.*;
  2. import java.util.stream.*;
  3.  
  4. class Scratch {
  5. public static void main(String[] args) {
  6. final List<ExampleObject> objects = List.of(
  7. new ExampleObject(1, "Real Name", "Real Value"),
  8. new ExampleObject(2, "Duplicate Name", "Duplicate Value"),
  9. new ExampleObject(3, "Duplicate Name", "Duplicate Value"),
  10. new ExampleObject(4, "Duplicate Name", "Duplicate Value"),
  11. new ExampleObject(5, "Real Name 2", "Real Value 2"),
  12. new ExampleObject(6, "Duplicate Name 2", "Duplicate Value 2"),
  13. new ExampleObject(7, "Duplicate Name 2", "Duplicate Value 2"));
  14. final TreeSet<ExampleObject> deduped = new TreeSet<>(
  15. Comparator.comparing(ExampleObject::getName)
  16. .thenComparing(ExampleObject::getValue));
  17. deduped.addAll(objects);
  18. System.out.println(deduped
  19. .stream()
  20. .map(Object::toString)
  21. .collect(Collectors.joining(System.lineSeparator())));
  22. }
  23. }
  24.  
  25. class ExampleObject {
  26. final int id;
  27. final String name;
  28. final String value;
  29.  
  30. public ExampleObject(int id, String name, String value) {
  31. this.id = id;
  32. this.name = name;
  33. this.value = value;
  34. }
  35.  
  36. public int getId() {
  37. return id;
  38. }
  39.  
  40. public String getName() {
  41. return name;
  42. }
  43.  
  44. public String getValue() {
  45. return value;
  46. }
  47.  
  48. @Override
  49. public boolean equals(Object o) {
  50. if (this == o) {
  51. return true;
  52. }
  53. if (o == null || getClass() != o.getClass()) {
  54. return false;
  55. }
  56. ExampleObject that = (ExampleObject) o;
  57. return id == that.id;
  58. }
  59.  
  60. @Override
  61. public int hashCode() {
  62. return Objects.hash(id);
  63. }
  64.  
  65. @Override
  66. public String toString() {
  67. return "ExampleObject{" +
  68. "id=" + id +
  69. ", name='" + name + '\'' +
  70. ", value='" + value + '\'' +
  71. '}';
  72. }
  73. }
Success #stdin #stdout 0.18s 53400KB
stdin
Standard input is empty
stdout
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'}