Как преобразовать Navigablemap в строку [] [] - PullRequest
1 голос
/ 26 августа 2010

Мне нужно преобразовать карту навигации в массив 2d String. Ниже приведен код из ответа на один из моих предыдущих вопросов.

NavigableMap<Integer,String> map =
        new TreeMap<Integer, String>();

map.put(0, "Kid");
map.put(11, "Teens");
map.put(20, "Twenties");
map.put(30, "Thirties");
map.put(40, "Forties");
map.put(50, "Senior");
map.put(100, "OMG OMG OMG!");

System.out.println(map.get(map.floorKey(13)));     // Teens
System.out.println(map.get(map.floorKey(29)));     // Twenties
System.out.println(map.get(map.floorKey(30)));     // Thirties
System.out.println(map.floorEntry(42).getValue()); // Forties
System.out.println(map.get(map.floorKey(666)));    // OMG OMG OMG!

Мне нужно преобразоватьэта карта в массив 2d String:

{
{"0-11","Kids"},
{"11-20","Teens"},
{"20-30","Twenties"}
...
}

Существует ли быстрый и элегантный способ сделать это?

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Лучшая ставка - просто итерация по карте и создание массива для каждой записи, хлопотная часть генерирует такие вещи, как «0-11», так как для этого требуется поиск следующего наивысшего ключа ... но поскольку карта отсортирована (потому что вы используете TreeMap), это не страшно.

String[][] strArr = new String[map.size()][2];
int i = 0;
for(Entry<Integer, String> entry : map.entrySet()){
    // current key
    Integer key = entry.getKey();
    // next key, or null if there isn't one
    Integer nextKey = map.higherKey(key);

    // you might want to define some behavior for when nextKey is null

    // build the "0-11" part (column 0)
    strArr[i][0] = key + "-" + nextKey;

    // add the "Teens" part (this is just the value from the Map Entry)
    strArr[i][1] = entry.getValue();

    // increment i for the next row in strArr
    i++;
}
1 голос
/ 26 августа 2010

вы можете создать два массива, один с ключами и один со значениями «элегантным способом», затем вы можете создать String [] [], используя эти два массива.

// Create an array containing the values in a map 
Integer[] arrayKeys = (Integer[])map.keySet().toArray( new Integer[map.keySet().size()]); 
// Create an array containing the values in a map 
String[] arrayValues = (String[])map.values().toArray( new String[map.values().size()]); 

String[][] stringArray = new String[arrayKeys.length][2];
for (int i=0; i < arrayValues.length; i++)
{
      stringArray[i][0] = arrayKeys[i].toString() + (i+1 < arrayValues.length ? " - " + arrayKeys[i+1] : "");
      stringArray[i][1] = arrayValues[i];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...