当打印我的hashmap中的项目时[请参阅以for (Map.Entry<String, World> entry : WorldsByName.entrySet())......
开头的代码],只打印出我添加的最后一项。其他人消失了。
.....
public interface World {
abstract void run(String s);
}
private void sample(String[] inserted) {
Map<String, World> WorldsByName = new HashMap<String, World>();
WorldsByName.put(inserted[1], new World() {
public void run(String s) {
if (inserted[0].equals("house")) {
System.out.println(inserted[0] + " with name " + s + " has been created.");
} else {
System.out.println("What do you mean by " + inserted[0] + " ?");
}
}
});
.....
答案 0 :(得分:0)
您的代码只在WorldsByName地图中放置单个值
WorldsByName.put(inserted[1], new World() ...
因此,当您尝试执行for循环时,它将只执行一个键值。
for (Map.Entry<String, World> entry : WorldsByName.entrySet()) {
修改强>
根据您的要求,您需要change the method structure
,否则您必须make WorldsByName as global variable
。对于您的用例,不需要for循环。
更改方法结构:
private void sample(String[] inserted, Map<String, World> WorldsByName) {
从调用方法传递实例化的WorldsByName,不要在sample方法中初始化它(new
)。确保为inserted和WorldsByName添加null检查和所有in sample方法。
将WorldsByName设为全局变量:
Map<String, World> WorldsByName = new HashMap<String, World>();
private void sample(String[] inserted) {
// Map<String, World> WorldsByName = new HashMap<String, World>();
WorldsByName.put(inserted[1], new World() {...
如果您要创建HashMapTest2类的多个实例,那么不要将WorldsByName设为静态,否则您也可以将WorldsByName设为静态
答案 1 :(得分:0)
您可以尝试一次插入所有项目,但该值将是对象签名..
static Map<String, World> WorldsByName = new HashMap<String, World>();
private void sample(final String[] inserted) {
for (int i = 0; i < inserted.length; i++)
WorldsByName.put(inserted[i], new World() {
public void run(String s) {
if (inserted[0].equals("house"))
System.out.println(inserted[0] + " with name " + s
+ " has been created.");
else
System.out.println("What do you mean by " + inserted[0]
+ " ?");
}
});
for (Map.Entry<String, World> entry : WorldsByName.entrySet())
System.out.println(entry.getKey() + ":-->" + entry.getValue());
//..your other code here..
}
并将该参数设为最终,但我不确定您在此处尝试实现的目标除外,这将为 defparser.HashParser$1@b1c260 等格式插入密钥值p>
答案 2 :(得分:0)
我认为,根据你之前的评论,你只会传递两个paameters,一个是house / hut / etc.第二是名字。因此,您正在使用inserted [0]和inserted [1]。 只要您只关心两个参数,这就没问题了。 要保留地图中的值,有多种方法: 1)创建HashMap作为实例变量并使用相同的对象来调用sample方法。例如:
class HashMaptest2{
Map<String, World> worldsByname = new HashMap<String, World>();
etc.
}
主要方法
psvm(){
HashMapTest2 test=new HashMaptest2();
test.sample(inserted1);
test.sample(inserted2)
2)第二种方法是在主类中创建HashMap,并将其传递给样本方法,如Naman指出的那样。