打印没有括号和逗号的TreeSet

时间:2014-07-26 19:06:13

标签: treeset

对于这个项目,我必须获取两个单独的文件并将它们格式化为哈希映射并打印出来。为了在我的树形图中按顺序获取成员,我首先必须将它们放入哈希集中。问题是,当我打印出哈希映射时,树集中的成员名称被格式化为" [membername,member name]"而且我不知道怎么骑括号和逗号。我正在考虑使用for循环,但我无法继续工作。有人可以帮忙吗?

import java.io.*;
import java.util.*;

public class Lab8
{
     public static void main( String args[] ) throws Exception
    {
        BufferedReader membersFile = new BufferedReader( new FileReader( "members.txt" ) );
        BufferedReader pacsFile = new BufferedReader( new FileReader( "pacs.txt" ) );
        TreeMap<String, TreeSet<String>> pac2Members = new TreeMap<String, TreeSet<String>>();

        while( pacsFile.ready() )
        {
            String pacNames = pacsFile.readLine();
            pac2Members.put(pacNames, new TreeSet<String>());
        }
        pacsFile.close();

        while( membersFile.ready() )
        {
            String[] members = membersFile.readLine().split(" ");
            for( int i=1; i < members.length; i++ )
            {
                pac2Members.get(members[i]).add(members[0]);
            }
        }
        membersFile.close();        

        for( String pacNames : pac2Members.keySet() )
        { 
            System.out.println(pacNames + " " + pac2Members.get(pacNames));
        }

    } // END MAIN

} // CLASS

2 个答案:

答案 0 :(得分:1)

嗯,我相信这里的问题是&#34; pac2Members.get(pacNames)&#34;在你的for循环中返回一个TreeSet,这不是你想要打印的。我还不确定你为什么要在TreeMap中使用TreeSet。如果您只是映射一个&#34;会员名称&#34;对于一个&#34;成员名称&#34;,那么你应该真的创建一个TreeMap并映射每个&#34; membername&#34;到&#34;会员名称&#34;。如果这是您正在尝试做的事情而且您不想更改代码,那么这应该适用于您的&#39; for&#39;循环:

for( String pacNames : pac2Members.keySet() )
{
    System.out.println(pacNames + " " + pac2Members.get(pacNames).first();
}

这应该只适用于&#34;会员名称&#34;要打印是您映射到的每个TreeSet中的第一个元素。希望这会有所帮助。

<强>更新

好的,我发现我误读了你的代码。好吧,如果你的TreeSet中有多个条目,你可以试试这个:

    for( String pacNames : pac2Members.keySet() )
    { 
        for (String memberName : pac2Members.get(pacNames)) {
            System.out.println(pacNames + " " + memberName);
        }
    }

不确定这是否会在语法上有效,但如果你沿着这些方向做某事,你应该得到你正在寻找的结果。

答案 1 :(得分:0)

您可以使用以下方法:

public static <T> String toString(Iterable<T> iterable)
{
    if (iterable == null)
    {
        return "null";
    }
    Iterator<T> i = iterable.iterator();
    if (!i.hasNext())
    {
        return "";
    }
    StringBuilder sb = new StringBuilder();
    while (true)
    {
        T t = i.next();
        sb.append(String.valueOf(t));
        if (!i.hasNext())
        {
            return sb.toString();
        }
        sb.append(" ");
    }
}

并相应地在您的代码中调用它:

for(String pacNames : pac2Members.keySet())
{ 
    System.out.println(pacNames + " " + toString(pac2Members.get(pacNames)));
}

  编辑:这是荒谬的假,但这就是要求:

    for(String pacNames : pac2Members.keySet())
    {
        TreeSet<String> s = pac2Members.get(pacNames);
        Iterator<String> i = s.iterator();
        StringBuilder sb = new StringBuilder();
        for (;;)
        {
            String t = i.next();
            sb.append(String.valueOf(t));
            if (!i.hasNext())
            {
                break;
            }
            sb.append(" ");
        }
        System.out.println(pacNames + " " + sb.toString());
    }
相关问题