Map.Entry:如何使用它?

2022-08-31 16:51:19

我正在努力创建一个计算器。我将我的按钮放在一个集合中,当我想将它们添加到我的类中时,我不知道如何从我的集合中获取按钮。所以我在互联网上找到了我代码的最后2行,但我不知道它们的含义。HashMapJPanel

这是我的代码:

import java.awt.Component;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.swing.JButton;
import javax.swing.JPanel;


public class PanneauCalcul extends JPanel {

    private HashMap<String, JButton> listbouton = new HashMap<String, JButton>() ;

    public PanneauCalcul() {
        for(int i = 0; i < 10; i ++) {
            listbouton.put("num" + i, new JButton("" + i)) ;
        }

        listbouton.put("add", new JButton("+")) ;
        listbouton.put("soustract", new JButton("-")) ;
        listbouton.put("multiply", new JButton("x")) ;
        listbouton.put("divise", new JButton("/")) ;
        listbouton.put("equal", new JButton("=")) ;

        Set entrys = listbouton.entrySet() ;

        Iterator iter = entrys.iterator() ;

        while(iter.hasNext()) {
            Map.Entry me = (Map.Entry)iter.next();  //don't understand 
            this.add((Component) me.getValue()) ;   //don't understand
        }

        EcouteCalcul ecout = new EcouteCalcul(this) ;
    }
}

我不明白我们如何在不重新定义 函数的情况下使用 -- 这是一个接口 。.Map.EntryMap.Entry


答案 1

Map.Entry是一个键,其值组合成一个类。这允许您迭代,而不必迭代 ,然后获取每个键的值。写你所拥有的东西的更好方法是:Map.entrySet()Map.keySet()

for (Map.Entry<String, JButton> entry : listbouton.entrySet())
{
  String key = entry.getKey();
  JButton value = entry.getValue();

  this.add(value);
}

如果这不清楚,请告诉我,我会修改我的答案。


答案 2

请注意,您还可以使用Map.Entry作为主要类型,使用其基本实现 AbstractMap.SimpleEntry 创建自己的结构。例如,如果你想有一个有序的条目列表,你可以写:

List<Map.Entry<String, Integer>> entries = new ArrayList<>();
entries.add(new AbstractMap.SimpleEntry<String, Integer>(myStringValue, myIntValue));

等等。从那里,您将获得一个元组列表。当您想要有序元组并且基本Map是行不通时,非常有用。