62

我正在用 Java 编写一个简单的编辑文本。当用户打开它时,将打开一个文件JTabbedPane。我做了以下保存打开的文件:

HashMap<String, Tab> hash = new HashMap<String, Tab>();

将在哪里Tab接收值,例如:File file, JTextArea container, JTabbedPane tab.

我有一堂课叫Tab

public Tab(File file, JTextArea container, JTabbedPane tab)
{
    this.file = file;
    this.container = container;
    this.tab = tab;
    tab.add(file.getName(), container);
    readFile();
}

现在,在这个SaveFile类中,我需要获取Tab存储在HashMap. 我怎样才能做到这一点?

4

11 回答 11

113

要从地图中获取所有值:

for (Tab tab : hash.values()) {
    // do something with tab
}

要从地图中获取所有条目:

for ( Map.Entry<String, Tab> entry : hash.entrySet()) {
    String key = entry.getKey();
    Tab tab = entry.getValue();
    // do something with key and/or tab
}

Java 8 更新:

处理所有值:

hash.values().forEach(tab -> /* do something with tab */);

处理所有条目:

hash.forEach((key, tab) -> /* do something with key and tab */);
于 2013-04-27T00:02:52.347 回答
35

Map内部由Map.Entry对象组成。每个都Entry包含keyvalue。要从条目中获取键和值,请使用访问器和修饰符方法。

如果你想values用给定key的,使用get()方法和插入值,使用put()方法。

#Define and initialize map;
Map map = new HashMap();
map.put("USA",1)
map.put("Japan",3)
map.put("China",2)
map.put("India",5)
map.put("Germany",4)

map.get("Germany") // returns 4

如果要从地图中获取键集,可以使用keySet()方法

Set keys = map.keySet();
System.out.println("All keys are: " + keys);
// To get all key: value
for(String key: keys){
    System.out.println(key + ": " + map.get(key));
}

通常,要从映射中获取所有键和值,您必须按照以下顺序进行操作:

  • 转换Hashmap为在with方法MapSet中获取一组条目。 :Mapentryset()
    Set st = map.entrySet();
  • 获取该集合的迭代器:
    Iterator it = st.iterator();
  • Map.Entry从迭代器中获取:
    Map.Entry entry = it.next();
  • 使用getKey()getValue()方法Map.Entry来获取键和值。
// Now access it
Set st = (Set) map.entrySet();
Iterator it = st.iterator();
while(it.hasNext()){
    Map.Entry entry = mapIterator.next();
    System.out.print(entry.getKey() + " : " + entry.getValue());
}

总之,直接在for中使用iterator

for(Map.Entry entry:map.entrySet()){
    System.out.print(entry.getKey() + " : " + entry.getValue());
}
于 2016-09-11T03:33:23.413 回答
12

你给1美元,它给你一个芝士汉堡。你给字符串,它给你标签。使用 HashMap 的 GET 方法得到你想要的。

HashMap.get("String");
于 2013-04-27T00:10:10.133 回答
4

要获取值和键 ,您可以使用 HashMap 的 values() 和 keySet() 方法

public static List getValues(Map map) {
    return new ArrayList(map.values());
}

public static List getKeys(Map map) {
    return new ArrayList(map.keySet());
}
于 2019-02-13T15:35:12.240 回答
2

你可以使用迭代器来做到这一点:

对于键:

for (Iterator <tab> itr= hash.keySet().iterator(); itr.hasNext();) {
    // use itr.next() to get the key value
}

您可以将迭代器与值类似地使用。

于 2014-06-24T17:17:06.757 回答
2
for (Map.Entry<String, Tab> entry : hash.entrySet()) {
    String key = entry.getKey();
    Tab tab = entry.getValue();
    // do something with key and/or tab
}

奇迹般有效。

于 2017-11-19T12:53:17.950 回答
2

它将与hash.get("key"); 其中 key 是您从 Map 获取值的关键

于 2018-12-26T09:04:37.333 回答
1

使用哈希图的“字符串”键来访问它的值,即您的选项卡类。

Tab mytab = hash.get("your_string_key_used_to_insert");
于 2013-04-26T23:57:24.747 回答
1

使用 java8 流式 API:

List values = map.entrySet().stream().map(Map.Entry::getValue).collect(Collectors.toList());
于 2017-01-30T18:46:35.323 回答
0

您必须遵循以下操作顺序:

  • 转换MapMapSet_ map.entrySet();
  • 获取迭代器Mapset.iterator();
  • 得到Map.Entry_iterator.next();
  • 使用Entry.getKey()Entry.getValue()
# define Map
for (Map.Entry entry: map.entrySet)
    System.out.println(entry.getKey() + entry.getValue);
于 2016-09-11T03:35:17.577 回答
0

使用 java 8 功能:

    map.forEach((key, value) -> System.out.println(key + " " + value));

使用 Map.Entry 你可以像这样打印:

 for (Map.Entry<KeyType, ValueType> entry : map.entrySet()) 
 {
     System.out.println(entry.getKey()+" : "+entry.getValue());
 }
于 2021-08-17T14:58:10.370 回答