Advertisement
Guest User

Untitled

a guest
Jan 21st, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.78 KB | None | 0 0
  1. import java.util.List;
  2. import java.util.Map;
  3. import java.util.stream.Stream;
  4. import java.util.*;
  5. import java.util.stream.Collectors;
  6.  
  7. class Sorter implements SorterInterface{
  8.     Stream<? extends Box3D> strumien;
  9.    
  10.     /**
  11.      * Metoda odczytuje nazwe klasy obiektu, ktorego referencja
  12.      * zostala od metody dostarczona.
  13.      * @param o referencja do obiektu, ktorego nazwa klasy jest poszukiwana
  14.      * @return nazwa obiektu odczytana na podstawie przekazanej referencji
  15.      */
  16.     public static String getName(Object o) {
  17.         return o.getClass().getSimpleName();
  18.     }
  19.  
  20.     /**
  21.      * Klasa prezentujaca mozliwosc pobrania nazwy klasy gdy dysponujemy referencja
  22.      * do obiektu interesujacej nas klasy. Kod mozna uruchomic (w systemie Linux) za
  23.      * pomoca polecenia: <br><tt>java8 SorterInterface\$Show</tt>
  24.      */
  25.     /*public class Show {
  26.         public static void main(String[] args) {
  27.             System.out.println(SorterInterface.getName(new Show()));
  28.             System.out.println(SorterInterface.getName(new Object()));
  29.             System.out.println(SorterInterface.getName("Ala ma kota"));
  30.             System.out.println(SorterInterface.getName(123));
  31.         }
  32.     }*/
  33.  
  34.     /**
  35.      * Metoda pozwala na przekazanie obiektowi strumienia, z ktorego obiekt bedzie
  36.      * pobierac dane. Strumien zawiera w sobie obiekty klasy Box3D i
  37.      * kllas pochodnych.
  38.      *
  39.      * @param stream
  40.      *            strumien z danymi
  41.      */
  42.     public void setInputStream(Stream<? extends Box3D> stream){
  43.         strumien = stream;
  44.     }
  45.  
  46.     /**
  47.      * Metoda dokonuje przegladu obiektow umieszczonych w strumieniu przekazanym za
  48.      * pomoca setInputStream oraz znajdujacych sie na przekazanej jako argument
  49.      * wywolania liscie. Matoda zwraca mape zawierajaca jako klucz nazwe klasy, z
  50.      * ktorej obiekt wygenerowano, a dla danego klucza, liste obiektow znalezionych
  51.      * w strumieniu i na przekazanej liscie
  52.      *
  53.      * @param additionalInput
  54.      *            lista zawierajaca obiekty typu Box3D i klas pochodnych
  55.      * @return mapa, w ktorej nazwa klasy wskazuje na liste wszystkich obiektow tej
  56.      *         klasy.
  57.      */
  58.     public Map<String, List<Box3D>> find(List<? extends Box3D> additionalInput){
  59.        
  60.         Map<String, List<Box3D>> mapa = new HashMap<String, List<Box3D>>();
  61.         List<Box3D> merge = Stream.concat(strumien, additionalInput.stream()).collect(Collectors.toList());
  62.         mapa = merge.stream().collect(Collectors.groupingBy(o->getName(o)));
  63.        
  64.         return mapa;
  65.     }
  66.  
  67.     /**
  68.      * Metoda dokonujaca posortowania obiektow udostepnionych poprzez strumien i
  69.      * additionalInput. Obiekty nalezy posortowac rosnaco wzgledem wartosci
  70.      * zwracanej przez metode getValue.
  71.      *
  72.      * @param additionalInput
  73.      *            lista zawierajaca obiekty typu Box3D i klas pochodnych
  74.      * @param output
  75.      *            wynik sortowania
  76.      */
  77.      @SuppressWarnings("unchecked")
  78.     public void sizeSort(List<? extends Box3D> additionalInput, List<? super Box3D> output){
  79.         List<? extends Box3D> list = strumien.collect(Collectors.toList()) ;
  80.         List<? extends Box3D> temp = Stream.of(list, additionalInput).flatMap(Collection::stream).collect(Collectors.toList());
  81.         temp.stream().sorted(Comparator.comparing(Box3D::getValue)).map(o->(Box3D)o).forEach(o->output.add(o));
  82.         //output.sort(Comparator.comparing(o -> o.getValue()));
  83.         //output = (List<? super Box3D>)test;
  84.     }
  85.  
  86.     /**
  87.      * Metoda przeszukuje przekazany za pomoca metody setInputStream strumien i
  88.      * wyszukuje obiekty, ktorych <b>typ jest inny</b> niz ten, ktory zostal
  89.      * przekazany jako obiekt wzorca (object).
  90.      *
  91.      * @param object
  92.      *            obiekt, ktorego typ ma zostac uzyty do przeszukania strumienia
  93.      * @param output
  94.      *            wynikowa lista zawierajaca wszystkie obiekt ze strumienia, ktorych
  95.      *            typ nie jest taki sam jak typ object.
  96.      */
  97.      @SuppressWarnings("unchecked")
  98.     public void findObjectsDifferentThan(Box3D object, List<? super Box3D> output){
  99.         //List<Box3D> temp = strumien.filter(o -> !(object.getClass().equals(o.getClass()))).collect(Collectors.toList());
  100.         strumien.filter(o -> !(getName(object) == getName(o))).map(o->(Box3D)o).forEach(o->output.add(o));
  101.         //output = (List<? super Box3D>)temp;
  102.     }
  103.  
  104.     /**
  105.      * Metoda przeszukuje strumien w poszukiwaniu obiektow, ktorych rozmiar mozna
  106.      * poznac. Te umieszcza na wynikowej liscie, o ile ich rozmiar bedzie wiekszy niz
  107.      * rozmiar przekazanego obiektu object2compare.
  108.      *
  109.      * @param object2compare
  110.      *            obiekt do porownania
  111.      * @return lista z obiektami, ktore sa wieksze od obiektu przekazanego.
  112.      */
  113.     public List<? extends Box3D> findObjectsLargerThan(Box3DWithSize object2compare){
  114.         @SuppressWarnings("unchecked")
  115.         List<Box3DWithSize> output = (List<Box3DWithSize>)strumien.filter(o->o instanceof Box3DWithSize).collect(Collectors.toList());
  116.         output = output.stream().filter(o->o.getSize()>object2compare.getSize()).collect(Collectors.toList());
  117.         return output;
  118.     }
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement