java - 根据索引打印 map 中的值

标签 java

如果我有以下 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/

相关文章:

java - 当 getter 方法为我做同样的工作时,为什么我需要 setter 方法?

java - 适配器中带有 addAll 的 NoSuchMethod?

java - 在不卡住主线程的情况下在 Espresso Android 中进行延迟测试

Java 文件从 CMD 设置调试点并使用 CMD 运行它

Jenkins 上的 Java 本地化测试失败

Java项目Ant构建错误

java 类和对象没有正确的输出

java - 不了解 Android 应用程序开发的基本概念

Java swing 应用程序找不到图像

java - 在 Ant 属性中存储 UNIX 时间戳?