<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: sortable code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 24 Jul 2008 07:19:55 GMT</pubDate>
    <description>DZone Snippets: sortable code</description>
    <item>
      <title>A sortable, ordered Map</title>
      <link>http://snippets.dzone.com/posts/show/2634</link>
      <description>This is a neat collection that allows its elements to be sorted arbitary by moving them up and down in the List or put them to a given index. Nice to display lists that can be edited (i.e. reordered) by the user.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.Collection;&lt;br /&gt;import java.util.Iterator;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import org.apache.commons.collections.map.ListOrderedMap;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * @author janhoo&lt;br /&gt; */&lt;br /&gt;public class SortableOrderedMap extends ListOrderedMap {&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Inserts a given Key/Value-Pair on a certain Position&lt;br /&gt;   * alle following Pairs are moved up accordingly &lt;br /&gt;   * &lt;br /&gt;   * @param newKey&lt;br /&gt;   * @param newValue&lt;br /&gt;   * @param pos&lt;br /&gt;   * @return&lt;br /&gt;   */&lt;br /&gt;  public Object putOnPosition(Object newKey, Object newValue, int pos) {&lt;br /&gt;    Object res = put(newKey, newValue);&lt;br /&gt;    while (indexOf(newKey) &gt; pos) {&lt;br /&gt;      moveUp(newKey);&lt;br /&gt;    }&lt;br /&gt;    return res;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Inserts a given Key/Value Pair before position of a given Key&lt;br /&gt;   * &lt;br /&gt;   * @param newKey&lt;br /&gt;   * @param newValue&lt;br /&gt;   * @param oldKey&lt;br /&gt;   * @return&lt;br /&gt;   */&lt;br /&gt;  public Object putBefore(Object newKey, Object newValue, Object oldKey) {&lt;br /&gt;    if (!containsKey(oldKey)) {&lt;br /&gt;      return put(newKey, newValue);&lt;br /&gt;    }&lt;br /&gt;    return putOnPosition(newKey, newValue, indexOf(oldKey));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * &lt;br /&gt;   * inserts a given key/value pair after the position of a given key&lt;br /&gt;   * &lt;br /&gt;   * @param newKey&lt;br /&gt;   * @param newValue&lt;br /&gt;   * @param oldKey&lt;br /&gt;   * @return&lt;br /&gt;   */&lt;br /&gt;  public Object putAfter(Object newKey, Object newValue, Object oldKey) {&lt;br /&gt;    if (!containsKey(oldKey)) {&lt;br /&gt;      return put(newKey, newValue);&lt;br /&gt;    }&lt;br /&gt;    return putOnPosition(newKey, newValue, indexOf(oldKey)+1);&lt;br /&gt;  }&lt;br /&gt;	&lt;br /&gt;  /**&lt;br /&gt;   * moves item with given key up by one step. Does nothing&lt;br /&gt;   * if the item is already on top or not existend.&lt;br /&gt;   * &lt;br /&gt;   * @param the key of the Item to be moved&lt;br /&gt;   */&lt;br /&gt;  public synchronized void moveUp(Object key) {&lt;br /&gt;&lt;br /&gt;    // return if already on top or key not in map	&lt;br /&gt;    if (key.equals(firstKey()) || !containsKey(key)) {&lt;br /&gt;      return;&lt;br /&gt;    }&lt;br /&gt;    int pcur = indexOf(key);&lt;br /&gt;&lt;br /&gt;    insertOrder.set(pcur, previousKey(key));&lt;br /&gt;    insertOrder.set(pcur - 1, key);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * moves item with given key down by one step. Does nothing&lt;br /&gt;   * if the item is already on bottom or not existend.&lt;br /&gt;   * &lt;br /&gt;   * @param the key of the Item to be moved&lt;br /&gt;   */&lt;br /&gt;  public synchronized void moveDown(Object key) {&lt;br /&gt;    if (key.equals(lastKey()) || !containsKey(key)) {&lt;br /&gt;      return;&lt;br /&gt;    }&lt;br /&gt;    int pcur = indexOf(key);&lt;br /&gt;    insertOrder.set(pcur, nextKey(key));&lt;br /&gt;    insertOrder.set(pcur + 1, key);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /* (non-Javadoc)&lt;br /&gt;   * @see org.apache.commons.collections.map.ListOrderedMap#asList()&lt;br /&gt;   */&lt;br /&gt;  public List asList() {&lt;br /&gt;    ArrayList v = new ArrayList();&lt;br /&gt;    for (Iterator it = values().iterator(); it.hasNext();) {&lt;br /&gt;      v.add(it.next());&lt;br /&gt;    }&lt;br /&gt;    return v;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;	&lt;br /&gt;  /* (non-Javadoc)&lt;br /&gt;   * @see java.lang.Object#toString()&lt;br /&gt;   */&lt;br /&gt;  public String toString() {&lt;br /&gt;    StringBuffer b = new StringBuffer();&lt;br /&gt;    for (Iterator it = values().iterator(); it.hasNext();) {&lt;br /&gt;      b.append(it.next().toString() + "\n");&lt;br /&gt;    }  &lt;br /&gt;    return b.toString();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Attention: this requires the jakarta commons collections</description>
      <pubDate>Thu, 21 Sep 2006 20:01:44 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2634</guid>
      <author>janhoo (Jan Galinski)</author>
    </item>
  </channel>
</rss>
