Java,从映射迭代器获取对象,然后调用方法?

Java,从映射迭代器获取对象,然后调用方法?,java,Java,我有一张地图,里面有一些物体,比如说苹果。我目前有一个迭代器,但我似乎只能调用getKey和getValue。getValue似乎返回实际Apple对象的内存地址,但我希望能够执行Apple a=Map.Entry.getValue() 我似乎只能得到密钥和内存地址:s Iterator it = ApplesMap.entrySet().iterator(); while (it.hasNext()) { Map.Entry entries = (Map.E

我有一张地图,里面有一些物体,比如说苹果。我目前有一个迭代器,但我似乎只能调用getKey和getValue。getValue似乎返回实际Apple对象的内存地址,但我希望能够执行Apple a=Map.Entry.getValue()


我似乎只能得到密钥和内存地址:s

Iterator it = ApplesMap.entrySet().iterator();     
while (it.hasNext()) {         
    Map.Entry entries = (Map.Entry)it.next();         
    System.out.println(entries.getKey() + " = " + entries.getValue());
    //Apple a = entries.getValue(); 
} 
试着铸造价值

Apple a = (Apple) entries.getValue();
a.beDelicious();
试着铸造价值

Apple a = (Apple) entries.getValue();
a.beDelicious();

如果您使用的是JDK 6,可以这样尝试:

for (Apple apple : applesMap.values())
{
    // process apple here.
}

如果您使用的是JDK 6,可以这样尝试:

for (Apple apple : applesMap.values())
{
    // process apple here.
}

这是古老的法典。对每个循环使用泛型和

Map<String, Apple> map = // create map here
for(Map.Entry<String, Apple> entry : map.entrySet()){
    Apple thisIsAnApple = entry.getValue();
    String andThisIsTheKeyThatLinksToIt = entry.getKey();
}
Map=//在此处创建映射
对于(Map.Entry:Map.entrySet()){
Apple ThisisAnaple=entry.getValue();
字符串和ThisTheKeyThatLinksToIt=entry.getKey();
}
顺便说一句:

  • 如果你只是想要钥匙,就用
    map.keySet()
  • 如果只需要这些值,请使用
    map.values()
  • 仅在需要时使用
    map.entrySet()
    完全映射

    • 这是古老的密码。对每个循环使用泛型和

      Map<String, Apple> map = // create map here
      for(Map.Entry<String, Apple> entry : map.entrySet()){
          Apple thisIsAnApple = entry.getValue();
          String andThisIsTheKeyThatLinksToIt = entry.getKey();
      }
      
      Map=//在此处创建映射
      对于(Map.Entry:Map.entrySet()){
      Apple ThisisAnaple=entry.getValue();
      字符串和ThisTheKeyThatLinksToIt=entry.getKey();
      }
      
      顺便说一句:

      • 如果你只是想要钥匙,就用
        map.keySet()
      • 如果只需要这些值,请使用
        map.values()
      • 仅在需要时使用
        map.entrySet()
        完全映射
      使用泛型:

      Map<String, Apple> map = ....;
      
      因为您在其中一条注释中有一个子问题:在引擎盖下,for-each循环使用
      迭代器。每个
      Iterable
      类都有资格使用for-each循环。但是您不必为操作迭代器而烦恼——它是为您自动操作的。如果要对其调用
      remove()
      迭代器仍然很有用。

      使用泛型:

      Map<String, Apple> map = ....;
      


      因为您在其中一条注释中有一个子问题:在引擎盖下,for-each循环使用
      迭代器。每个
      Iterable
      类都有资格使用for-each循环。但是您不必为操作迭代器而烦恼——它是为您自动操作的。如果要对其调用
      remove()
      迭代器仍然很有用。

      “我似乎只能获取密钥和内存地址:s”:)如果映射包含从某个密钥到apple实例的条目,entry.getValue()将返回实际的apple。如果print语句在内存中显示类似于地址的内容,则Apple类应重写toString()以打印有意义的内容。应使用泛型。它不是内存地址,而是该对象的
      hashcode
      。@asgs来自对象。hashcode()javadocs:这通常是通过将对象的内部地址转换为整数来实现的,但JavaTM编程语言“我似乎只能获取密钥和内存地址:s”不需要这种实现技术(如果映射包含从某个密钥到apple实例的条目,则为entry.getValue()返回实际的苹果。如果print语句在内存中显示类似于地址的内容,则Apple类应重写toString()以打印有意义的内容。应使用泛型。它不是内存地址,而是该对象的
      hashcode
      。@asgs来自对象。hashcode()javadocs:这通常是通过将对象的内部地址转换为整数来实现的,但是JavaTM编程语言不需要这种实现技术。所有其他答案都比这个好,但这是唯一的升级票?为了平衡,向所有其他人投赞成票…@Sean如果回答质量不好,可以随意投反对票。“我会像对待男人一样对待它。”巴拉-答案是正确的。所以没有否决票。但其他人更好:)@James-因为它更冗长,而且编译时也不安全。@Bala不,这不是一个坏答案。你直接回答了这个问题,对吗。但所有其他答案都解决了问题本身的问题:-)所有其他答案都比这一个好,但这一个得到了唯一的投票?为了平衡,向所有其他人投赞成票…@Sean如果回答质量不好,可以随意投反对票。“我会像对待男人一样对待它。”巴拉-答案是正确的。所以没有否决票。但其他人更好:)@James-因为它更冗长,而且编译时也不安全。@Bala不,这不是一个坏答案。你直接回答了这个问题,对吗。但所有其他答案都解决了问题本身的问题:-)但你不能推翻你自己的。。所以我给你一个小小的平衡:)但是你不能把你自己的投得更高。。因此,我有一点平衡:)这是一个比使用迭代器“更小”的方法吗?为什么我们需要迭代器?@James这是一种在内部使用迭代器的快捷方式,所有实现的对象都可以使用它,并解释了@James yes这被称为JDK 1.5中引入的循环,迭代器是实现您所做的事情的一种较旧的方法。这是一种比使用迭代器“更低级”的方法吗?为什么我们需要迭代器?@James这是一种在内部使用迭代器的快捷方式,所有实现的对象都可以使用它,并解释说@James是的,这被称为JDK 1.5中引入的循环,迭代器是实现您所做的事情的一种较老的方法。您能澄清一下,为什么是泛型吗?我认为在泛型上你使用“E”和“T”符号等等:)@James-在声明中使用E和T(
      Map
      )。但是当使用它们时,你会使用类型。你能澄清一下,为什么这是泛型吗?我认为在泛型上你使用“E”和“T”符号等等:)@James-在声明中使用E和T(
      Map
      )。但在使用它们时,您使用类型。