Wojtek said:
How would you sort timezones?
Do you mean 'java.util.TimeZone'?
I am trying to sort them according to their offset from UTC. I cannot
use a TreeMap because there are many timezones with the same offset,
which of course over-writes the previously put timezone.
There's no "of course" about that if you are using your "preferred sort".
Why would you use any kind of 'Map' rather than a 'Collection'?
The preferred sort would be offset, then display name.
'TimeZone' can easily be a map key, yes, even for a 'TreeMap'. I fail to see
the problem. You simply compare based on your "preferred sort".
I'd be more concerned about relocation of a key when the offset changes for
DST. But perhaps you're only building this structure for a given moment in
time and that isn't a concern for you.
Regardless, here's uncompiled, off-the-cuff code, using a 'Set' instead of a
'Map':
public class SortedZone
{
private long ref = System.currentTimeMillis();
private final TreeSet <TimeZone> zones =
new TreeSet <TimeZone>
( new Comparator <TimeZone> ()
{
@Override public int compare( TimeZone t0, TimeZone t1 )
{
return
(t0 == null? (t1 == null? 0: -1)
: t1 == null? 1
: t0.getOffset( ref ) > t1.getOffset( ref )? 1
: t0.getOffset( ref ) < t1.getOffset( ref )? -1
: t0.getDisplayName().compareTo( t1.getDisplayName() )
);
}
}
);
// cover methods for the Set ...
}