Guest User

Untitled

a guest
Nov 23rd, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.53 KB | None | 0 0
  1. import java.util.Comparator;
  2. import java.util.Optional;
  3.  
  4. import org.junit.jupiter.api.Assertions;
  5. import org.junit.jupiter.api.Test;
  6.  
  7. public class CustomComparatorTest {
  8.  
  9. static class CustomComparator<T> implements Comparator<T> {
  10.  
  11. @Override
  12. public int compare(T arg0, T arg1) {
  13. return 0;
  14. }
  15.  
  16. @Override
  17. public Comparator<T> thenComparing(Comparator<? super T> arg0) {
  18. return new CustomComparator<>();
  19. }
  20.  
  21. }
  22.  
  23. static <T> Optional<Comparator<T>> instanceOfCustomComparator(Comparator<T> comparator) {
  24. if (comparator instanceof CustomComparator) {
  25. return Optional.of(comparator);
  26. } else if (LambdaReflectionUtils.isMethodReference(comparator)) {
  27. Comparator<T> referencedMethodOwner = LambdaReflectionUtils.getReferencedMethodOwner(comparator);
  28. return instanceOfCustomComparator(referencedMethodOwner);
  29. } else if (LambdaReflectionUtils.isReverseComparator(comparator)) {
  30. Comparator<T> originalComparator = LambdaReflectionUtils.getOriginalComparator(comparator);
  31. return instanceOfCustomComparator(originalComparator);
  32. } else if (LambdaReflectionUtils.isThenComparingComparator(comparator)) {
  33. Comparator<T> firstComparator = LambdaReflectionUtils.getThenComparingFirstComparator(comparator);
  34. Optional<Comparator<T>> optionalFirstComparator = instanceOfCustomComparator(firstComparator);
  35. if (optionalFirstComparator.isPresent()) {
  36. Comparator<T> firstCustomComparator = optionalFirstComparator.get();
  37. Comparator<T> secondComparator = LambdaReflectionUtils.getThenComparingSecondComparator(comparator);
  38. Optional<Comparator<T>> optionalSecondComparator = instanceOfCustomComparator(secondComparator);
  39. if (optionalSecondComparator.isPresent()) {
  40. Comparator<T> secondCustomComparator = optionalSecondComparator.get();
  41. return Optional.of(firstCustomComparator.thenComparing(secondCustomComparator));
  42. }
  43. }
  44. }
  45. return Optional.empty();
  46. }
  47.  
  48. @Test
  49. public void identifiesCustomComparator() {
  50. CustomComparator<String> comparator = new CustomComparator<>();
  51. Optional<Comparator<String>> instanceOfCustomComparator = instanceOfCustomComparator(comparator);
  52. Assertions.assertTrue(instanceOfCustomComparator.isPresent());
  53. Assertions.assertTrue(instanceOfCustomComparator.get() instanceof CustomComparator);
  54. }
  55.  
  56. @Test
  57. public void identifiesMethodReference() {
  58. CustomComparator<String> comparator = new CustomComparator<>();
  59. Optional<Comparator<String>> instanceOfCustomComparator = instanceOfCustomComparator(comparator::compare);
  60. Assertions.assertTrue(instanceOfCustomComparator.isPresent());
  61. Assertions.assertTrue(instanceOfCustomComparator.get() instanceof CustomComparator);
  62. }
  63.  
  64. @Test
  65. public void identifiesThenComparingWithMethodReference() {
  66. CustomComparator<String> comparator = new CustomComparator<>();
  67. Comparator<String> methodReference = comparator::compare;
  68. Optional<Comparator<String>> instanceOfCustomComparator = instanceOfCustomComparator(
  69. methodReference.thenComparing(methodReference));
  70. Assertions.assertTrue(instanceOfCustomComparator.isPresent());
  71. System.out.println(instanceOfCustomComparator.get().getClass().getName());
  72. Assertions.assertTrue(instanceOfCustomComparator.get() instanceof CustomComparator);
  73. }
  74.  
  75. @Test
  76. public void identifiesThenComparingMethodReferenceWithMethodReference() {
  77. CustomComparator<String> comparator = new CustomComparator<>();
  78. Comparator<String> methodReference = comparator::compare;
  79. Optional<Comparator<String>> instanceOfCustomComparator = instanceOfCustomComparator(
  80. methodReference.thenComparing(methodReference)::compare);
  81. Assertions.assertTrue(instanceOfCustomComparator.isPresent());
  82. Assertions.assertTrue(instanceOfCustomComparator.get() instanceof CustomComparator);
  83. }
  84.  
  85. @Test
  86. public void identifiesMultipleThenComparingMethodReferenceWithMethodReference() {
  87. CustomComparator<String> comparator = new CustomComparator<>();
  88. Comparator<String> methodReference = comparator::compare;
  89. Comparator<String> multipleThenComparing = methodReference.thenComparing(methodReference)::compare;
  90. Optional<Comparator<String>> instanceOfCustomComparator = instanceOfCustomComparator(
  91. multipleThenComparing.thenComparing(multipleThenComparing)::compare);
  92. Assertions.assertTrue(instanceOfCustomComparator.isPresent());
  93. Assertions.assertTrue(instanceOfCustomComparator.get() instanceof CustomComparator);
  94. }
  95.  
  96. @Test
  97. public void identifiesMultipleThenComparingAndReversedMethodReferenceWithMethodReference() {
  98. CustomComparator<String> comparator = new CustomComparator<>();
  99. Comparator<String> methodReference = comparator::compare;
  100. Comparator<String> multipleThenComparing = methodReference
  101. .thenComparing(methodReference.reversed()::compare)::compare;
  102. Optional<Comparator<String>> instanceOfCustomComparator = instanceOfCustomComparator(
  103. multipleThenComparing.thenComparing(multipleThenComparing.reversed()::compare).reversed()::compare);
  104. Assertions.assertTrue(instanceOfCustomComparator.isPresent());
  105. Assertions.assertTrue(instanceOfCustomComparator.get() instanceof CustomComparator);
  106. }
  107.  
  108. }
Add Comment
Please, Sign In to add comment