java - Comparator for Optional -



java - Comparator for Optional<T> -

i have abstract class optionalcomparator<t extends comparable<t>> implements comparator<optional<t>>

so far, good.

following model used optional itself, figured best have single instance of class, , cast when necessary (for example, optionalcomparator<integer>).

so made private static final optionalcomparator<? extends comparable<?>> absent_first.

the problem came when tried assign value. should type be?

new optionalcomparator<comparable<object>>() {...} doesn't work.

new optionalcomparator<comparable<comparable<object>>>() {...} doesn't work.

new optionalcomparator<integer>() {...} work, example, want least-specific type possible.

what doing wrong? how can create base-case instance of class?

you can have multiple implementations of optionalcomparator this:

private static final optionalcomparator<? extends comparable<?>> absent_first = new absentfirst<>(); private static final optionalcomparator<? extends comparable<?>> absent_last = new absentlast<>(); private interface optionalcomparator<t extends comparable<t>> extends comparator<optional<t>> { } private static class absentfirst<t extends comparable<t>> implements optionalcomparator<t> { @override public int compare(optional<t> obj1, optional<t> obj2) { if (obj1.ispresent() && obj2.ispresent()) { homecoming obj1.get().compareto(obj2.get()); } else if (obj1.ispresent()) { homecoming -1; } else if (obj2.ispresent()) { homecoming 1; } else { homecoming 0; } } } private static class absentlast<t extends comparable<t>> implements optionalcomparator<t> { @override public int compare(optional<t> obj1, optional<t> obj2) { if (obj1.ispresent() && obj2.ispresent()) { homecoming obj1.get().compareto(obj2.get()); } else if (obj1.ispresent()) { homecoming 1; } else if (obj2.ispresent()) { homecoming -1; } else { homecoming 0; } } } static <t extends comparable<t>> optionalcomparator<t> absentfirstcomparator() { @suppresswarnings("unchecked") optionalcomparator<t> comp = (optionalcomparator<t>) absent_first; homecoming comp; } static <t extends comparable<t>> optionalcomparator<t> absentlastcomparator() { @suppresswarnings("unchecked") optionalcomparator<t> comp = (optionalcomparator<t>) absent_last; homecoming comp; } public static void main(string... args) { optionalcomparator<integer> absentfirstint = absentfirstcomparator(); system.out.println(absentfirstint.compare(optional.of(1), optional.empty())); optionalcomparator<integer> absentlastint = absentlastcomparator(); system.out.println(absentlastint.compare(optional.of(1), optional.empty())); optionalcomparator<double> absentfirstdouble = absentfirstcomparator(); system.out.println(absentfirstdouble.compare(optional.of(1.0), optional.empty())); optionalcomparator<double> absentlastdouble = absentlastcomparator(); system.out.println(absentlastdouble.compare(optional.of(1.0), optional.empty())); }

output:

-1 1 -1 1

java generics guava

Comments

Popular posts from this blog

java - How to set log4j.defaultInitOverride property to false in jboss server 6 -

c - GStreamer 1.0 1.4.5 RTSP Example Server sends 503 Service unavailable -

Using ajax with sonata admin list view pagination -