Advertisement
NelloRizzo

Interfacce Funzionali e Lambda Expressions

May 27th, 2020
1,143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.00 KB | None | 0 0
  1. package corso.java;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Collections;
  6. import java.util.List;
  7. import java.util.stream.Collectors;
  8. import java.util.stream.Stream;
  9.  
  10. public class Program {
  11.  
  12.     public static boolean ordinamentoCrescente(Integer a, Integer b) {
  13.         return a > b;
  14.     }
  15.  
  16.     public static boolean ordinamentoDecrescente(Integer a, Integer b) {
  17.         return a > b;
  18.     }
  19.  
  20.     interface MetodoUtente { // interfaccia funzionale
  21.         boolean decidiSeScambiare(Integer a, Integer b);
  22.     }
  23.  
  24.     public static class OrdinaCrescente implements MetodoUtente {
  25.  
  26.         @Override
  27.         public boolean decidiSeScambiare(Integer a, Integer b) {
  28.             return a > b;
  29.         }
  30.  
  31.     }
  32.  
  33.     public static class OrdinaDecrescente implements MetodoUtente {
  34.  
  35.         @Override
  36.         public boolean decidiSeScambiare(Integer a, Integer b) {
  37.             return a < b;
  38.         }
  39.  
  40.     }
  41.  
  42.     public static class OrdinaComeMiPareEPiace implements MetodoUtente {
  43.  
  44.         @Override
  45.         public boolean decidiSeScambiare(Integer a, Integer b) {
  46.             return a % 2 == 0 ? a > b : b > a;
  47.         }
  48.  
  49.     }
  50.  
  51.     public static void sort(Integer[] a, MetodoUtente metodo) {
  52.         for (int i = 0; i < a.length - 1; ++i) {
  53.             for (int j = i + 1; j < a.length; ++j) {
  54.                 if (metodo.decidiSeScambiare(a[i], a[j])) {
  55.                     int temp = a[i];
  56.                     a[i] = a[j];
  57.                     a[j] = temp;
  58.                 }
  59.             }
  60.         }
  61.     }
  62.  
  63.     public static void sortAsc(Integer[] a) {
  64.         for (int i = 0; i < a.length - 1; ++i) {
  65.             for (int j = i + 1; j < a.length; ++j) {
  66.                 if (a[i] > a[j]) { // if (decidiSeScambiare(a[i], a[j])
  67.                     int temp = a[i];
  68.                     a[i] = a[j];
  69.                     a[j] = temp;
  70.                 }
  71.             }
  72.         }
  73.     }
  74.  
  75.     public static void sortDesc(Integer[] a) {
  76.         for (int i = 0; i < a.length - 1; ++i) {
  77.             for (int j = i + 1; j < a.length; ++j) {
  78.                 if (a[i] < a[j]) {
  79.                     int temp = a[i];
  80.                     a[i] = a[j];
  81.                     a[j] = temp;
  82.                 }
  83.             }
  84.         }
  85.     }
  86.  
  87.     static void print(Integer[] a) {
  88.         for (int i : a)
  89.             System.out.println(i);
  90.     }
  91.  
  92.     public static void main(String[] args) {
  93.         Integer[] vettore = { 432, 867, 2134, 8657, 465, 2345, 978, 1234 };
  94.         System.out.println("Array da ordinare:");
  95.         print(vettore);
  96.         sortAsc(vettore);
  97.         System.out.println("Array ordinato:");
  98.         print(vettore);
  99.         sortDesc(vettore);
  100.         System.out.println("Array ordinato in senso decrescente:");
  101.         print(vettore);
  102.         sort(vettore, new OrdinaComeMiPareEPiace());
  103.         System.out.println("Array ordinato con sort + decidiSeScambiare:");
  104.         print(vettore);
  105.         System.out.println("Array ordinato con sort + interfaccia anonima:");
  106.         sort(vettore, new MetodoUtente() { // implementazione anonima di interfaccia
  107.  
  108.             @Override
  109.             public boolean decidiSeScambiare(Integer a, Integer b) {
  110.                 System.out.println("decido se scambiare " + a + " e " + b);
  111.                 return a > b / 2;
  112.             }
  113.         });
  114.         print(vettore);
  115.         System.out.println("Array ordinato con sort + espressione lambda semplice:");
  116.         sort(vettore, (x, y) -> x > y / 2);
  117.         print(vettore);
  118.         int divisore = (args[0] != null) ? Integer.parseInt(args[0]) : 2;
  119.         System.out.println("Array ordinato con sort + espressione lambda complessa:");
  120.         sort(vettore, (x, y) -> {
  121.             System.out.println("decido se scambiare " + x + " e " + y);
  122.             return x > y / divisore;
  123.         });
  124.         print(vettore);
  125.         System.out.println("Lavoriamo con le collections:");
  126.         List<Integer> li = new ArrayList<>(Arrays.asList(vettore));
  127.         List<Integer> r = pari(li);
  128.         System.out.println("Lista filtrata con funzione:");
  129.         for (Integer i : r)
  130.             System.out.println(i);
  131.         System.out.println("Filtro e mapping con lambda e stream:");
  132.         Stream<Integer> si = li.stream().filter(item -> item % 2 != 0).map(elemento -> elemento * 2).skip(2).limit(2);
  133.         li.add(2000);
  134.         li.add(5432);
  135.         for (Integer i : si.collect(Collectors.toList())) {
  136.             System.out.println(i);
  137.         }
  138.         for (MyClass i : li.stream().map(item -> new MyClass(item)).collect(Collectors.toList()))
  139.             System.out.println(i.valore);
  140.     }
  141.  
  142.     static class MyClass {
  143.         public int valore;
  144.  
  145.         public MyClass(int i) {
  146.             this.valore = i;
  147.         }
  148.     }
  149.  
  150.     public static List<Integer> pari(List<Integer> origine) {
  151.         List<Integer> risultato = new ArrayList<>();
  152.         for (Integer i : origine)
  153.             if (i % 2 == 0)
  154.                 risultato.add(i);
  155.         return risultato;
  156.     }
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement