繁体   English   中英

如何在地图中访问对象的字符串?

[英]How do I access the string of an object in my Map?

不知道问题和我的实际问题是否是同一回事...

我有一张地图制作如下:

Map<String, Animal> animalMap= new HashMap<String, Animal>;
Animal lion = new Animal();
Animal elephant = new Animal();
Animal cheetah = new Animal();

animalMap.put("lion", lion);
animalMap.put("elephant", elephant);
animalMap.put("cheetah", cheetah);

好像我可以访问对象的“名称”,现在我要打印如下语句:

“狮子跳上了大象!” 或“猎豹跳上大象!”

当我调用一个函数

lion.jump(elephant);

要么

cheetah.jump(elephant);

System.out.println("The " + lion + " jumped on the " + elephant + "!");
System.out.println("The " + cheetah + " jumped on the " + elephant + "!");

您不需要为此的HashMap。 相反,Java类可以覆盖toString方法。 当您这样做时,对象将自动转换为字符串。

public class Elephant{
    private String name;

    public Elephant(String name){
        this.name = name;
    }

    @Override
    public String toString() {
        return "this elephant is named" + this.name;
    }
}

如果将其添加到大象类,则以下代码将在新的大象对象上调用toString。

Elephant e = new Elephant("steve");
System.out.println(e);

我不确定您到底想做什么,但是我想您想保留一个反向映射,以便可以进行反向查找。

Map<Animal,String> animalMapReverse= new HashMap<>();
Animal lion = new Animal();
Animal elephant = new Animal();
Animal cheetah = new Animal();

animalMapReverse.put(lion,"lion");
animalMapReverse.put(elephant,"elephant");
animalMapReverse.put(cheetah,"cheetah");

有了此代码,您可以执行以下操作:

System.out.println("The " + animalMapReverse.get(lion) +
    " jumped on the " + animalMapReverse.get(elephant) + "!");

我也认为您不需要HashMap 更喜欢,你需要

public class Animal {

   private String name;

   public Animal(String name) {
      this.name = name;     
   }

   public String getName() {
      return name;
   }
}

然后,您可以像这样使用它:

Animal lion = new Animal("lion");
Animal elephant = new Animal("elephant");
System.out.println(lion.getName() + " jumps over " + elephant.getName());       

您可以保留地图,这将使您可以按其String名称查找Animal。

但是,请遵循Mateva的建议,并在您的Animal类中添加一个String name

该地图可能在动物中,您可以

public class Animal {
    private static Map<String,Animal> name2animal = ...;

    private String name;
    public Animal( String n ){
        name = n;
        name2animal.put( n, this );
    }

等等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM