Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #37072

Re: What's the best way to make a cross string set?

From Sebastian <nowhere@nirvana.org>
Newsgroups comp.lang.java.programmer
Subject Re: What's the best way to make a cross string set?
Date 2017-08-06 18:13 +0200
Organization albasani.net
Message-ID <om7f78$qnc$1@news.albasani.net> (permalink)
References (16 earlier) <abafc97c-13c8-4934-9f55-0e0606c126c7@googlegroups.com> <om58cc$2bd$1@dont-email.me> <om59v8$41u$1@dont-email.me> <om5ct1$g6d$1@dont-email.me> <om5fqc$kv8$1@dont-email.me>

Show all headers | View raw


Am 06.08.2017 um 00:11 schrieb Martin Gregorie:
> On Sat, 05 Aug 2017 17:25:44 -0400, Eric Sosman wrote:
>
>>      It turns out that he's not trying to change the ordering
>> rule in mid-stream (at least, he didn't show any such attempt). Rather,
>> he's got an obfuscated way of implementing a two-part key: The first
>> part is this "style" number, and if the numbers agree the second is
>> either a String or an int (disguised as an Integer), depending on the
>> style.
>>
> OK, but thats a pretty poor way of implementing a two-part key, or an n-
> part key for that matter. Assuming that a is a more significant part than
> b, then the comparison should rather be something like this:
>
> int compareTo(Thing thing)
> {
>    int r1 = a.compare-to(thing.geta());
>    if (r1 != 0)
>       return r1
>    else
>       return b.compareTo(thing.getb());
> }
>
> with the restriction that all multipart key elements must be accessable
> to getters or must not be protected or private: an not unreasonable
> restriction.
>
[mutability concerns snipped]

I think it would probably be better to pass explicit Comparators to the 
TreeMap etc. here, instead of making Thing implement Comparator. With 
Java's functional constructs (I wonder why they are so seldomly 
mentioned in this newsgroup) you can easily separate key-definition and 
comparison proper, which allows you to combine multiple "elementary" 
comparators without having to reinvent the wheel (the cascading 
comparison logic) each time. Like:

static Comparator<Thing> byStyle = Comparator.comparing(Thing::getStyle);

static Comparator<Thing> bySomeValue = 
Comparator.comparing(Thing::getStyleDependentSortKey);

... perhaps more

static Comparator<Thing> multiKey = byStyle.thenComparing(bySomeValue);

-- Sebastian



Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-07-27 12:12 -0700
  Re: What's the best way to make a cross string set? Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2017-07-27 14:38 -0500
    Re: What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-07-27 12:49 -0700
  Re: What's the best way to make a cross string set? Eric Sosman <esosman@comcast-dot-net.invalid> - 2017-07-27 15:49 -0400
    Re: What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-07-27 12:55 -0700
    Re: What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-07-27 13:22 -0700
      Re: What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-07-27 13:30 -0700
      Re: What's the best way to make a cross string set? Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2017-07-27 15:34 -0500
      Re: What's the best way to make a cross string set? Eric Sosman <esosman@comcast-dot-net.invalid> - 2017-07-27 18:27 -0400
        Re: What's the best way to make a cross string set? lewbloch@gmail.com - 2017-07-28 18:51 -0700
    Re: What's the best way to make a cross string set? v_borchert@despammed.com (Volker Borchert) - 2017-07-29 06:03 +0000
  Re: What's the best way to make a cross string set? v_borchert@despammed.com (Volker Borchert) - 2017-07-28 18:19 +0000
    Re: What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-07-28 13:28 -0700
      Re: What's the best way to make a cross string set? Eric Sosman <esosman@comcast-dot-net.invalid> - 2017-07-28 17:20 -0400
        Re: What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-07-31 05:24 -0700
          Re: What's the best way to make a cross string set? Eric Sosman <esosman@comcast-dot-net.invalid> - 2017-07-31 12:01 -0400
            Re: What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-07-31 10:58 -0700
          Re: What's the best way to make a cross string set? Sebastian <nowhere@nirvana.org> - 2017-07-31 18:13 +0200
          Re: What's the best way to make a cross string set? lewbloch@gmail.com - 2017-07-31 09:24 -0700
          Re: What's the best way to make a cross string set? Arne Vajhøj <arne@vajhoej.dk> - 2017-07-31 19:24 -0400
        Re: What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-08-01 06:36 -0700
          Re: What's the best way to make a cross string set? Eric Sosman <esosman@comcast-dot-net.invalid> - 2017-08-01 10:58 -0400
            Re: What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-08-01 08:09 -0700
              Re: What's the best way to make a cross string set? lewbloch@gmail.com - 2017-08-01 09:39 -0700
                Re: What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-08-01 10:18 -0700
                Re: What's the best way to make a cross string set? Andreas Leitgeb <avl@logic.at> - 2017-08-02 09:22 +0000
                Re: What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-08-02 05:13 -0700
                Re: What's the best way to make a cross string set? Andreas Leitgeb <avl@logic.at> - 2017-08-03 14:33 +0000
                Re: What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-08-03 08:51 -0700
                Re: What's the best way to make a cross string set? Eric Sosman <esosman@comcast-dot-net.invalid> - 2017-08-03 12:20 -0400
                Re: What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-08-03 10:15 -0700
                Re: What's the best way to make a cross string set? Eric Sosman <esosman@comcast-dot-net.invalid> - 2017-08-03 13:42 -0400
                Re: What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-08-03 11:17 -0700
                Re: What's the best way to make a cross string set? Eric Sosman <esosman@comcast-dot-net.invalid> - 2017-08-05 16:08 -0400
                Re: What's the best way to make a cross string set? Martin Gregorie <martin@address-in-sig.invalid> - 2017-08-05 20:31 +0000
                Re: What's the best way to make a cross string set? Eric Sosman <esosman@comcast-dot-net.invalid> - 2017-08-05 17:25 -0400
                Re: What's the best way to make a cross string set? Martin Gregorie <martin@address-in-sig.invalid> - 2017-08-05 22:11 +0000
                Re: What's the best way to make a cross string set? Sebastian <nowhere@nirvana.org> - 2017-08-06 18:13 +0200
                Re: What's the best way to make a cross string set? Eric Douglas <e.d.programmer@gmail.com> - 2017-08-02 12:56 -0700
  Re: What's the best way to make a cross string set? Eric Sosman <esosman@comcast-dot-net.invalid> - 2017-07-29 16:55 -0400
  Re: What's the best way to make a cross string set? Sebastian <nowhere@nirvana.org> - 2017-07-29 23:56 +0200

csiph-web