desislava_topuzakova

08. Custom Comparator

Sep 30th, 2021
1,532
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.81 KB | None | 0 0
  1. import java.util.*;
  2. import java.util.function.*;
  3. import java.util.stream.Collectors;
  4.  
  5. public class FormulaOne_02 {
  6.     public static void main(String[] args) {
  7.         //Function<приема, връща> -> apply
  8.         //Consumer<приема> -> void -> accept
  9.         //Supplier<връща> -> get
  10.         //Predicate<приема> -> false / true -> test
  11.         //BiFunction<приема1, приема2, връща> -> apply
  12.         Scanner scanner = new Scanner(System.in);
  13.         List<Integer> numbers = Arrays.stream(scanner.nextLine().split("\\s+")).map(Integer::parseInt).collect(Collectors.toList());
  14.  
  15.  
  16.         //comparator -> function приема 2 елемента и връща цяло число (0, 1, -1)
  17.         //0 -> първия елемент == втория елемент
  18.         //1 -> първия елемент > втория елемент
  19.         //-1 -> първия елемент < втория елемент
  20.  
  21.         //sorted (0) -> не разменя двата елемента
  22.         //sorted(1) -> разменя елементите
  23.         //sorted(-1) -> не разменя елементите
  24.  
  25.         //2 0 3 5 4
  26.         //comparator (2, 0) -> 1 отива sorted  -> разменя 2 и 0 -> 0 2 3 5 4
  27.         //comparator (2, 3) -> -1 отива в sorted -> не разменя -> 0 2 3 5 4
  28.         //comparator (3, 5) -> -1 отива в sorted -> не разменя -> 0 2 3 5 4
  29.         //comparator (5, 4) -> 1 отива sorted  -> разменя 5 и 4 -> 0 2 3 4 5
  30.         //ляво -> четно, дясно -> нечетно
  31.         Comparator<Integer> comparator = ((first, second) -> {
  32.             //първо четно, второ нечетно -> не разменяме
  33.             if (first % 2 == 0 && second % 2 != 0) {
  34.                 return -1;
  35.             }
  36.             //първо нечетно, второ четно -> размяна
  37.             else if (first % 2 != 0 && second % 2 == 0) {
  38.                 return 1;
  39.             }
  40.             //първо четно, второто четно
  41.             //първи нечетно, второто нечетно
  42.             else {
  43.                 return first.compareTo(second);
  44.                 //first == second -> 0 -> няма размяна
  45.                 //first < second -> -1 -> няма размяна
  46.                 //first > second -> 1 -> има размяна
  47.             }
  48.  
  49.         });
  50.  
  51.         numbers.stream().sorted(comparator).forEach(number -> System.out.print(number + " "));
  52.  
  53.         //1 2 3 4 5 6
  54.         //1 и 2 -> comparator 1 -> sorted(1) -> размяна -> 2 1 3 4 5 6
  55.         //1 и 3 -> comparator -1 -> sorted(-1) -> няма размяна ->  2 1 3 4 5 6
  56.         //3  и 4 -> comparator 1 -> sorted (1) -> размяна -> 2 1 4 3 5 6
  57.  
  58.     }
  59.  
  60. }
Advertisement
Add Comment
Please, Sign In to add comment