java - Passing and casting a Comparator as argument of method using Lambdas -
how can create method accept comparator wildcard argument, , capture class , use comparator ?
public list<string> myfilter(comparator<?> comp, object value, class c){ return mylist.stream() .filter(s-> comp.compare(c.cast(s), c.cast(value))>=0 ).collect(tolist()); }
edit: ok, in fact, andrew's answer interesting , works quite :) yet,given comments, should want is: instead of trying cast within method, expect cast had been done within comparator
so give:
public list<string> filter(comparator<string> comp){ return mylist.filter(s->comp.compare(s, null)>=0).collect(tolist()); }
and when calling it, should like
list<string> mynewlist= filter((string s1, string s2)->{ try{ int i=integer.parseint(s1); return integer.compare(i, myrealcomparevalue); }catch(exception e){ e.printstacktrace(); return null; });
it doesn't nice though....
in fact, question possible duplicate of how define method takes lambda parameter in java 8?
and wanted
public list<string> myfilter(mycomparator c){ return mylist .stream() .filter(c::compare) .collect(tolist()); }
with , interface mycomparator:
public interface mycomparator{ public boolean compare(string s); }
and called:
list<string> mynewlist=filter((string s)->s.compareto(whateverstring)>=0);
or even:
list<string> mynewlist=filter((string s)->{ try{ return integer.compare(integer.parseint(s), 10)>=0; }catch(exception e){ return false; });
Comments
Post a Comment