Re: Converting a HashMap<String, Thing> into a sorted array
qu0ll,
There are lots of ways to do this depending on your actual goal.
As a HashMap has keys and values, is your end goal to have an array of
{something} in the order that the keys are sorted or based on how the
{something}'s should be ordered on their own?
If its the later, you probably want to create a Comparator for each
{something} you want to sort.
Here is a simple example - not sure if its exactly what you want but
hopefully it helps.
/* Begin qu0ll.java */
import java.util.*;
public class qu0ll {
public static void main(String args[]) {
qu0llSomethingComparator c = new qu0llSomethingComparator();
qu0llSomething[] myArray = new qu0llSomething[args.length];
for (int i = 0; i < args.length; i ++) {
myArray[i] = new qu0llSomething(args[i]);
}
Arrays.sort(myArray, c);
for (qu0llSomething q : myArray) {
System.out.println(q);
}
}
}
/* Begin qu0llSomethingComparator.java */
import java.util.*;
public class qu0llSomethingComparator implements
Comparator<qu0llSomething> {
public int compare(qu0llSomething q1, qu0llSomething q2) {
// Specialized rules for ordering go here
if (q1.getLength() < q2.getLength()) {
return -1;
}
else if (q1.getLength() == q2.getLength()) {
if (q1.hashCode() < q2.hashCode()) {
return -1;
}
else if (q1.hashCode() > q2.hashCode()) {
return 1;
}
else {
return 0;
}
}
else {
return 1;
}
}
public boolean equals(Object o) {
return (o == this);
}
}
/* Begin qu0llSomething.java */
public class qu0llSomething {
private String value;
public qu0llSomething(String value) {
this.value = value;
}
// Will throw NullPointerException if value is null
public int getLength() {
return value.length();
}
public String getValue() {
return value;
}
public String toString() {
return getValue();
}
}
--
Let me know if I can assist further.
-kavaj
qu0ll wrote:
I would like to code a method to convert a particular HashMap into a sorted
array. This is what I came up with:
public convert(final HashMap<String, Thing> things)
{
Thing[] tArray = new Thing[things.size()];
Collection<Thing> tCollection = things.values();
int i = 0;
for (Thing t : tCollection)
{
tArray[i++] = t;
}
Arrays.sort(tArray);
return tArray;
}
Well it works but is there a more efficient/elegant way of doing this?
Also, it would be nice to write it in such a way that it would convert any
HashMap not just those using Thing. Can anyone assist?
--
And loving it,
qu0ll
______________________________________________
qu0llSixFour@gmail.com
(Replace the "SixFour" with numbers to email)