2010-08-26 26 views
1

我需要一个导航地图转换为2D字符串array.Below给出的是从answer代码我刚才的问题之一。如何将NavigableMap的转换为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! 

我有这个地图转换为二维String数组:

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

是否有一个快速和优雅的方式来做到这一点?

+0

' “妈呀妈呀妈呀!”“ - LOL难怪片段看起来很熟悉... – polygenelubricants 2010-08-26 11:45:48

+0

@poly:有一个更好的解决方案? – Emil 2010-08-26 11:48:14

+0

@Emil:你是否必须将数据表示为一个String [] []'?怎么样一个普通的'List >'而不是?你可以得到'MappedInterval.start()'和'.END()'和'.value的()',你可以'@ Override'的'的toString()'打印像'[开始结束] = >价值'或类似的东西。基本上我不认为你可以想出任何更好的算法来转换为'String [] []',但是比起'String [] []'有更好的表示,我可以给出这个片段要做到这一点。 – polygenelubricants 2010-08-26 11:54:29

回答

2

最好的办法就是通过地图迭代,并为每个条目的数组,麻烦的部分产生喜欢的东西“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++; 
} 
+0

谢谢,它的工作原理。当nextKey为null时我休息了一会儿。我会稍等一会儿,看看其他人是否会给出更好的结果。 – Emil 2010-08-26 11:06:03

1

可以创建两个阵列,一个与所述键和一个与处于“优雅的方式”的值,则使用该两个阵列可以构造一个字符串[] []。

// 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]; 
} 
相关问题