物品没有被添加

时间:2015-01-07 04:27:32

标签: java

当打印我的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] + " ?");
                    }
                }
            });

.....

3 个答案:

答案 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指出的那样。