我有这个
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.Scanner;
import static java.lang.System.*;
public class Relatives
{
private Map<String,Set<String>> map;
public Relatives()
{
map = new TreeMap<String,Set<String>>();
}
public void setPersonRelative(String line)
{
String[] personRelative = line.split(" ");
String person = personRelative[0];
String relative = personRelative[1];
if(map.containsKey(person))
{
map.get(person).add(relative);
}
else
{
Set<String> relatives = new TreeSet<String>();
relatives.add(relative);
map.put(person,relatives);
}
}
/**
* Returns the String version of the set containing person's relatives
* (see last line of sample output)
* @param person the person whose relative set should be returned as a String
* @param the string version of person's relative set
*/
public String getRelatives(String person)
{
return map.keySet();
}
如何将地图作为字符串返回并使其看起来像这样
鲍勃与约翰汤姆有关 Dot与Chuck Fred Jason Tom相关 埃尔顿与Linh有关
我尝试过类型转换,虽然我不认为它会工作和解析哪些也没有用,而且这是我目前的
答案 0 :(得分:1)
我会从这样的事情开始:
public String getRelatives(String person)
{
StringBuilder sb = new StringBuilder();
sb.append(person);
sb.append(" is related to ");
for(String relative : map.get(person))
{
sb.append(relative);
sb.append(' ');
}
return sb.toString();
}
或者如果你想变得更复杂,并处理一个人与任何人没有关系的情况:
public String getRelatives(String person)
{
StringBuilder sb = new StringBuilder();
sb.append(person);
Set<String> relatives = map.get(person);
if(relatives == null || relatives.isEmpty())
{
sb.append("is not related to anyone.");
}
else
{
sb.append(" is related to ");
for(String relative : relatives)
{
sb.append(relative);
sb.append(' ');
}
}
return sb.toString();
}
如果您正确地初始化了地图,并且地图映射到的地图,那么您应该没问题。
基本上你创建了一个StringBuilder
(这可能有点过头了,但这仍然是一种很好的做法),用你想要的东西填充它,然后调用它的.toString()
方法。
for循环只是遍历Set
的内容,并在StringBuilder中填充相对的名称,以及一个空格字符来区分。
其他说明:
private Map<String,Set<String>> map;
public Relatives()
{
map = new TreeMap<String,Set<String>>();
}
可以是:
private Map<String, Set<String>> map = new TreeMap<String, Set<String>>();
或者,如果使用Java 7,只需:
private Map<String, Set<String>> map = new TreeMap<>();
(注意这样,如果它只是用于初始化地图,则不需要显式构造函数)
我也会改变这个:
if(map.containsKey(person))
{
map.get(person).add(relative);
}
else
{
Set<String> relatives = new TreeSet<String>();
relatives.add(relative);
map.put(person,relatives);
}
要:
if(!map.containsKey(person))
{
map.put(person, new TreeSet<String>());
}
map.get(person).add(relative);
更简单,并避免冗余