Algoritmo de dirección cardinal en Java

Este fin de semana dedico unos minutos a mezclar un algoritmo que tomaría un encabezado (en grados) y devolvería una Cadena para la dirección cardinal (lo estoy usando en una aplicación de brújula de Android que estoy usando). Lo que terminé con esto fue:

private String headingToString(Float heading)
{
    String strHeading = "?";
    Hashtable<String, Float> cardinal = new Hashtable<String, Float>();
    cardinal.put("North_1", new Float(0));
    cardinal.put("Northeast", new Float(45));
    cardinal.put("East", new Float(90));
    cardinal.put("Southeast", new Float(135));
    cardinal.put("South", new Float(180));
    cardinal.put("Southwest", new Float(225));
    cardinal.put("West", new Float(270));
    cardinal.put("Northwest", new Float(315));
    cardinal.put("North_2", new Float(360));

    for (String key: cardinal.keySet())
    {
        Float value = cardinal.get(key);
        if (Math.abs(heading - value) < 30)
        {
            strHeading = key;
            if (key.contains("North_"))
            {
                strHeading = "North";
            }
            break;
        }
    }
    return strHeading;
}

Mi pregunta es, ¿es esta la mejor manera de hacer esto? Debe haberse hecho muchas veces antes, aunque todavía no he realizado una búsqueda de ejemplos en la web. ¿Alguna otra persona lo ha intentado y ha encontrado una solución mejor?

Edite las respuestas de Thilo, shinjin y Chrstoffer de The Reverand:

La solución

public static String headingToString2(double x)
{
    String directions[] = {"N", "NE", "E", "SE", "S", "SW", "W", "NW", "N"};
    return directions[ (int)Math.round((  ((double)x % 360) / 45)) ];
}

Respuestas a la pregunta(5)

Su respuesta a la pregunta