以特定格式显示嵌套地图的内容

时间:2014-04-21 01:21:52

标签: java collections map hashmap

我使用嵌套地图来存储值。我需要以特定的格式打印它。

输入数据:

University      Department    DeptHead
A                X               Tim
B                X               Jim
C                X               John
A                Y               Alex
C                Z               Peter
D                Z               Dan
B                Z               Ashley
B                Y               Peter
D                Y               Maria

代码:

import java.io.OutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class testNested {

public static void printMap(Map<String, String> map,Object key)
{
    Iterator it = map.entrySet().iterator();

   // System.out.print(key.toString());

    while(it.hasNext())
    {
       Map.Entry pairs = (Map.Entry)it.next(); 
       System.out.print(key.toString() + "   "+ pairs.getKey() + "   " +         pairs.getValue());
    }
    System.out.println();
}

public static void main(String arg[])
{
    Map<String,Map<String,String>> map= new HashMap<String,Map<String, String>>();
    Map<String,String>A=new HashMap<String, String>();
    Map<String,String>B=new HashMap<String, String>();
    Map<String,String>C=new HashMap<String, String>();
    Map<String,String>D=new HashMap<String, String>();
    A.put("X", "Tim");
    A.put("Y", "Alex");
    B.put("X", "Jim");
    B.put("Z", "Ashley");
    B.put("Y", "Peter");
    C.put("X", "John");
    C.put("Z", "Peter");
    D.put("Y", "Maria");
    D.put("Z", "Dan");
    map.put("A",A);
    map.put("B", B);
    map.put("C", C);
    map.put("D", D);

    Iterator it = map.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pairs = (Map.Entry)it.next();
        //System.out.println(pairs.getKey());
        printMap((Map<String, String>)pairs.getValue(),pairs.getKey());
    }
}
}

输出:

D Y   Maria Z   Dan
A Y   Alex X   Tim
B Y   Peter X   Jim Z   Ashley
C X   John Z   Peter

我需要以下面的格式显示输出(预期输出):

University      X      Y         Z      
A               Tim    Alex      -  
B               Jim    Peter   Ashley  
C               John   -         Peter  
D               -       Maria     Dan  

使用HashMap执行此操作的最佳方式是什么?

没有HashMap的问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

哈希映射将始终以随机顺序打印。如果您需要保存某种类型的订单格式,我会建议一个地图列表,或者在抽象阶梯上更进一步,您可以将其设置为地图集合。这取决于您需要对数据执行的操作。在分布式设置中,HashMap通常足以用于此类数据收集,然后数据库执行排序,而不是HashMap本身。
这是我所说的快速草图:

    private Collection<Map<String, String>> people  = 
                             new ArrayList<Map<String, String>>();

这样您只需制作地图并按照所需顺序将其添加到列表中。
如果你确实按照建议把它变成了一个集合,你就可以通过构造函数传递它,并做你需要做的事情:

    private Set<Map<String, String>> peopleNoDuplicates = 
                            new TreeSet<Map<String, String>>(people);

在编辑问题后添加: 由于时间的原因,我无法一步一步地展示所有内容。对不起,如果您还有问题,我会再次回来编辑。

您在问题域中确实没有足够的对象来正确执行此操作。你真的应该有一个名为&#34; Person&#34;你还应该有一个对象&#34;大学&#34;和一个Department对象,它是&#34;大学内部的一个领域。然后,您可以使用这些对象相互传递信息。否则你会错过OOP可以做的所有伟大的事情。

public class Person{
    private String name;
    private int id;
    private static instanceCounter = 1000;
//always use the constructor to make sure you get mandatory values in your objects 
public Person(String name){
    setName(name);
    this.id = instanceCounter++;

public final void setName(String name)throws IllegalArg....{
    if(name == null || name.isEmpty()){
        throw new IllegalArg..Ex...("Sorry name is not valid");
    }
    this.name = name;
}

 public String getName.....

然后你需要一所大学

public class University{
    // in here you can have a some sort of collection or map of dept heads and match them up with a collection of people. ASgain a Map is the fastest way to do this, but this is where you have to put some thought into the problem and think about what is really the best way to do this. 

您可能想尝试使用格式对象将其放入测试文件中... Idk,它;是您的电话,但需要经过深思熟虑和反复试验。如果再进入另一个果酱,请回发。