A
Andreas Leitgeb
From: "Andreas Leitgeb" <andreas.leitgeb@1:261/38.remove-yy0-this>
From: "Andreas Leitgeb" <andreas.leitgeb@1:261/38.remove-s5y-this>
From: Andreas Leitgeb <[email protected]>
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.
-+- BBBS/Li6 v4.10 Dada-1
+ Origin: Prism bbs (1:261/38)
-+- Synchronet 3.16a-Win32 NewsLink 1.98
Time Warp of the Future BBS - telnet://time.synchro.net:24
-+- BBBS/Li6 v4.10 Dada-1
+ Origin: Prism bbs (1:261/38)
-+- Synchronet 3.16a-Win32 NewsLink 1.98
Time Warp of the Future BBS - telnet://time.synchro.net:24
--- BBBS/Li6 v4.10 Dada-1
* Origin: Prism bbs (1:261/38)
--- Synchronet 3.16a-Win32 NewsLink 1.98
Time Warp of the Future BBS - telnet://time.synchro.net:24
From: "Andreas Leitgeb" <andreas.leitgeb@1:261/38.remove-s5y-this>
From: Andreas Leitgeb <[email protected]>
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.
-+- BBBS/Li6 v4.10 Dada-1
+ Origin: Prism bbs (1:261/38)
-+- Synchronet 3.16a-Win32 NewsLink 1.98
Time Warp of the Future BBS - telnet://time.synchro.net:24
-+- BBBS/Li6 v4.10 Dada-1
+ Origin: Prism bbs (1:261/38)
-+- Synchronet 3.16a-Win32 NewsLink 1.98
Time Warp of the Future BBS - telnet://time.synchro.net:24
--- BBBS/Li6 v4.10 Dada-1
* Origin: Prism bbs (1:261/38)
--- Synchronet 3.16a-Win32 NewsLink 1.98
Time Warp of the Future BBS - telnet://time.synchro.net:24