如果我有以下 map :
NavigableMap<Integer,String> nmap =
new TreeMap<Integer,String>();
nmap.put(3, "Three");
nmap.put(1, "One");
nmap.put(4, "Four");
nmap.put(5, "Five");
nmap.put(7, "Seven");
nmap.put(10, "Ten");
System.out.println(nmap);
// {1=One, 3=Three, 4=Four, 5=Five, 7=Seven, 10=Ten}
是否有一种机制可以允许我打印此内容,如果索引小于以下索引打印中的 1 -(破折号),则按索引值打印:
One,-,Three,Four,Five,-,Six,Seven,-,-,Ten
我该如何为此编写函数?
我不必将每个键/值对的整个映射打印为字符串
最佳答案
这是一个通用的解决方案,它也可以进行串联。我的泛型知识有点狡猾,所以不要对奇怪的错误感到惊讶:
static <V> List<V> NMapToList(NavigableMap<Integer,V> nmap, V emptyEntryValue)
{
Integer next = null;
List<V> list = new ArrayList<V>();
for(NavigableMap.Entry<Integer, V> e : nmap.entrySet())
{
Integer current = e.getKey();
if(next != null)
for(int i = next; i < current; i++)
list.add(emptyEntryValue);
list.add(e.getValue());
next = current + 1;
}
return list;
}
static String listToString(List<?> l, String separator)
{
StringBuilder sb = new StringBuilder("(");
String sep = "";
for (Object object : l)
{
sb.append(sep).append(object.toString());
sep = separator;
}
return sb.append(")").toString();
}
String s = listToString(NMapToList(nmap,'-'),',');
关于java - 根据索引打印 map 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3317968/