Musze na zajecia napisac metode :
- sorted(), wołaną z argumentami mapa i lambda-wyrażenie. Metoda zwraca posortowaną wersję dowolnej mapy przekazanej jako piewrszy argument, a porządek sortowania jest określony przez lambda wyrażenia, podane jako drugi argument
- iltered(...) z argumentami: dowolna mapa i lambda. Metoda zwraca mapę, która zawiera tylko te wejścia z przekazanej jako pierwszy argument mapy, które spelniają warunek podany jako drugi argument (lambda z wynikiem typu boolean).
Warunkiem zaliczenia jest to by te metody byly uniwersalne czyli mialy mozliwosc zastosowania dla roznych rodzajow map. O to moje rozwiązanie:
public <T,D>Map<T,D> sorted(Map<T,D> map, BiFunction<Entry<T,D>,Entry<T,D>,Integer> func){
List<Entry<T,D>> list = new ArrayList<Entry<T,D>>(map.entrySet());
Collections.sort( list, new Comparator<Map.Entry<T,D>>()
{
@Override
public int compare(Entry<T,D> o1, Entry<T,D> o2) {
int res = func.apply(o1, o2);
return res;
}
} );
LinkedHashMap<T,D> result = new LinkedHashMap<>();
for(int i=0; i<list.size(); i++){
T key = list.get(i).getKey();
D value = list.get(i).getValue();
result.put(key, value);
}
return (Map<T,D>)result;
}
public <T,D> Map<T, D> filter(Map<T, D> map, Predicate<T> pred){
Map<T,D> result = map;
Set<T> keys = map.keySet();
Iterator<T> iter = keys.iterator();
ArrayList<T> keyToRemove = new ArrayList<>();
while(iter.hasNext()){
T k = iter.next();
if(!pred.test(k)){
keyToRemove.add(k);
}
}
iter = keyToRemove.iterator();
while(iter.hasNext())
result.remove(iter.next());
return (Map<T,D>)result;
}
Niestety moje rozwiazanie jest zle(tak ocenil profesor) i chcialbym wiedziec dlaczego i jak moge to naprawić.
Czy jakas dobra duszyczka pomoże mi?