SortedMap: getting value for largest key less or equal a givenvalue...

Discussion in 'Java' started by Andreas Leitgeb, Aug 1, 2012.

  1. I've got an approach like the following, but I'm not entirely
    happy with it. (see embedded comments)
    Error checking left out only for brevity-of-post's sake.

    <sscce>
    class StepFunction<K,V> {
    SortedMap<K,V> m_map = new TreeMap<K,V>();
    public void put(K k,V v) { m_map.put(k,v); } // for demo-fill

    /** @return the value for the largest key in the map
    that is less OR equal to the given parameter. */

    public V value(K k) {
    // not really correct for generic use. In my usecase, K is
    // actually Long, so I just add one to k to make it work.
    return m_map.get(m_map.headMap(k).lastKey());

    // I'm a bit unhappy about headMap's "open end",
    // and also about the lack of some method like
    // lastEntry() or lastKeysValue() in SortedMap,
    // requiring one to look up the lastKey in the map,
    // although the map had "its finger on it" just before.
    // Did I miss something simple and obvious?
    }
    // demo-helper
    void checkVal(K k, V v) {
    System.out.println( map.value(k) + " should be " + v);
    }
    public static void main(String[] args) {
    StepFunction<Integer,Double> sf = new StepFunction<>()
    sf.put(Integer.MIN_VALUE, -1.0);
    sf.put(0, 0.0); sf.put(2, 1.0);

    sf.checkVal(-1 , -1.0);
    sf.checkVal( 0 , 0.0);
    sf.checkVal( 1 , 0.0);
    sf.checkVal( 2 , 1.0);
    sf.checkVal(Integer.MAX_VALUE , 1.0);
    }
    }
    </sscce>

    PS: No need to offer "solutions" involving linear search.
    I could have come up with one, myself, if I wanted one.
    Andreas Leitgeb, Aug 1, 2012
    #1
    1. Advertising

  2. Andreas Leitgeb <> wrote:
    > I've got an approach like the following, but I'm not entirely
    > happy with it...


    It took me about an hour to compose that previous post, and not
    only did a bug still hide in it ("map" instead of "m_map"), but
    also: only five minutes after posting, it occurred to me that I
    could also look at TreeMap's methods, rather than only at
    SortedMap's, and thereby stumbled over the (new in 1.6) interface
    NavigableMap.

    PS: return m_map.floorEntry(k).getValue(); // :)
    Case closed.
    Andreas Leitgeb, Aug 1, 2012
    #2
    1. Advertising

  3. Andreas Leitgeb

    markspace Guest

    On 8/1/2012 1:19 PM, Andreas Leitgeb wrote:
    > Andreas Leitgeb <> wrote:
    >> I've got an approach like the following, but I'm not entirely
    >> happy with it...

    >
    > It took me about an hour to compose that previous post, and not
    > only did a bug still hide in it ("map" instead of "m_map"), but
    > also: only five minutes after posting, it occurred to me that I
    > could also look at TreeMap's methods, rather than only at
    > SortedMap's, and thereby stumbled over the (new in 1.6) interface
    > NavigableMap.
    >
    > PS: return m_map.floorEntry(k).getValue(); // :)
    > Case closed.



    It is my contention that any requests for help should contain a careful
    explanation of the problem and attempted solutions, plus an SSCCE. Then
    the author should save the request on disc and go to lunch. If no
    solution was discovered during lunch, then the request should be sent.

    I think there's a Dilbert cartoon about this.
    markspace, Aug 1, 2012
    #3
  4. Andreas Leitgeb

    Roedy Green Guest

    Re: SortedMap: getting value for largest key less or equal a given value...

    On Wed, 01 Aug 2012 14:48:20 -0700, markspace <-@.> wrote, quoted or
    indirectly quoted someone who said :

    >save the request on disc and go to lunch.


    Bertrand Russell "told" me about this years ago. You have to get away
    from your computer. He suggested even a week of "not" thinking about
    it for a toughie. Then when you revisit the problem, the answer will
    be right under your nose.

    I just think about the problem while walking. The details are cleared
    away so I have to think more abstractly. I ask myself , what could be
    failing that created those symptoms. I am not looking for particular
    code, just thinking about code that does some function. It is a
    different sort of thinking than trying to decide if a line of code is
    faulty.

    Of course Murphy's law says the most likely time for the answer to
    come to you is one second after hitting submit.
    --
    Roedy Green Canadian Mind Products
    http://mindprod.com
    The greatest shortcoming of the human race is our inability to understand the exponential function.
    ~ Dr. Albert A. Bartlett (born: 1923-03-21 age: 89)
    http://www.youtube.com/watch?v=F-QA2rkpBSY
    Roedy Green, Aug 2, 2012
    #4
  5. Andreas Leitgeb

    Daniel Pitts Guest

    On 8/2/12 1:20 AM, Roedy Green wrote:
    > On Wed, 01 Aug 2012 14:48:20 -0700, markspace <-@.> wrote, quoted or
    > indirectly quoted someone who said :
    >
    >> save the request on disc and go to lunch.

    >
    > Bertrand Russell "told" me about this years ago. You have to get away
    > from your computer. He suggested even a week of "not" thinking about
    > it for a toughie. Then when you revisit the problem, the answer will
    > be right under your nose.
    >
    > I just think about the problem while walking. The details are cleared
    > away so I have to think more abstractly. I ask myself , what could be
    > failing that created those symptoms. I am not looking for particular
    > code, just thinking about code that does some function. It is a
    > different sort of thinking than trying to decide if a line of code is
    > faulty.
    >
    > Of course Murphy's law says the most likely time for the answer to
    > come to you is one second after hitting submit.

    If we're talking about Murphy, then by submit you mean "deploy the hack
    workaround fix to production after a month of QA".

    ;-)
    Daniel Pitts, Aug 2, 2012
    #5
  6. Daniel Pitts <> wrote:
    > On 8/2/12 1:20 AM, Roedy Green wrote:
    >> On Wed, 01 Aug 2012 14:48:20 -0700, markspace <-@.> wrote, quoted or
    >> indirectly quoted someone who said :
    >>> save the request on disc and go to lunch.


    I hardly ever go to lunch at all. Typically have a bite at the workplace...

    >> Bertrand Russell "told" me about this years ago. You have to get away
    >> from your computer.


    Away from the computer I couldn't have had a look at TreeMap's methods...

    >> He suggested even a week of "not" thinking about it for a toughie.


    Within a week of this strategy, surely one of the coworkers would have noticed
    my inactivity on the task and taken it over... maybe eventually asking me what
    I think I'm being paid for... Nope, rather not let that happen ;-)

    >> Of course Murphy's law says the most likely time for the answer to
    >> come to you is one second after hitting submit.

    Good description of what kind of happened, btw.

    > If we're talking about Murphy, then by submit you mean "deploy the hack
    > workaround fix to production after a month of QA".
    > ;-)

    ;-)
    Andreas Leitgeb, Aug 3, 2012
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    3
    Views:
    717
    Thomas Hawtin
    Mar 27, 2006
  2. Andreas Leitgeb
    Replies:
    5
    Views:
    184
    Andreas Leitgeb
    Aug 3, 2012
  3. Andreas Leitgeb
    Replies:
    2
    Views:
    116
    markspace
    Aug 3, 2012
  4. Andreas Leitgeb
    Replies:
    2
    Views:
    137
    markspace
    Aug 4, 2012
  5. Andreas Leitgeb
    Replies:
    2
    Views:
    145
    markspace
    Aug 4, 2012
Loading...

Share This Page