2014-10-28 56 views
-1

我在使用HashMap時遇到問題。我已使用此數據的test.txt:HashMap幫助,從文件打印讀取到控制檯或JTextArea

[Computers] 
Keyboard=10 
Mouse=5 
[Cars] 
Lamborghini=6 
BMW=3 

其中[計算機] & [汽車]的種類,鍵盤,鼠標,蘭博基尼BMW是描述符,和10,圖5,圖6,圖3是用於每個值描述。

我怎樣才能使HashMap可以System.out.println("Category" + "descriptor" + value)在控制檯上或在JTextArea點擊一個按鈕?

+0

你打算如何在地圖上查找東西?按類別?通過描述符? – 2014-10-28 17:16:18

+0

按類別我想,我想。我只是爲了打印每個描述符的值 – 2014-10-28 17:24:00

+0

鏈接到[HashMap實現問題...](http://stackoverflow.com/a/26611687/2958086) – Compass 2014-10-28 17:28:24

回答

0

我認爲可以使用兩個級別的hashmaps來完成。

在第一個哈希表級別上,使用category作爲你的關鍵字和它的值,使用另一個hashmap,它的關鍵是描述符。

+0

指南針在這裏解釋我[鏈接](http://stackoverflow.com/a/26611687/2958086),但我不知道如何製作代碼。我對新來的Java。 – 2014-10-28 18:07:50

+0

你可以使用python嗎?它可以非常容易地在python中實現..或者你可以使用這樣的hashmap中的一對密鑰Map Map ,V>或者使用Map > map = // ... // ... map.get(2).get(5); – 2014-10-28 18:46:53

+0

沒有。並且我選擇了java,因爲我必須將此程序運行到Windows 2000桌面。它的工作......,我有一個相機,可以測量對象,如電話,按鈕,任何對象。並且相機選擇距離是否良好,如果不是她拋出物體,則保持該物體。而相機不會顯示壞的或好的數量。它只能寫入像我的例子中的文件行[類別] bad = 30(30是30壞塊)好= 10(10是10好塊) – 2014-10-28 18:52:20

0

你想要的是一個multimap,一個可以爲每個鍵有多個值的映射,因爲每個類別都可以有多個(描述符,值)對。在某些第三方Java庫(如Guava)中有多個映射,但您可以使用映射到值列表(如Map<String, List<Descriptor>>,其中Descriptor是包含(描述符,價值)對。

在Java 8中添加到Mapmerge方法對於構建這樣的映射非常有效。

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Objects; 
import java.util.Map; 

public class Descriptor { 
    private final String descriptor; 
    private final int value; 

    public Descriptor(String descriptor, int value) { 
     this.descriptor = Objects.requireNonNull(descriptor); 
     this.value = value; 
    } 

    public String getDescriptor() { 
     return descriptor; 
    } 

    public int getValue() { 
     return value; 
    } 

    @Override public String toString() { 
     return descriptor + ", " + value; 
    } 

    public static void main(String[] args) { 
     // create map (essentially a multimap 
     Map<String, List<Descriptor>> map = new HashMap<>(); 

     insert(map, "Computers", "Keyboard", 10); 
     insert(map, "Computers", "Mouse", 5); 
     insert(map, "Cars", "Lamborghini", 6); 
     insert(map, "Cars", "BMW", 3); 

     // display all descriptors for a category 
     String category = "Cars"; 
     for (Descriptor desc : map.get(category)) { 
      System.out.println(category + ", " + desc); 
     } 
    } 

    public static void insert(Map<String, List<Descriptor>> map, 
      String category, String descriptor, int value) { 
     // insert items in the map using Map.merge 
     List<Descriptor> list = new ArrayList<>(); 
     list.add(new Descriptor(descriptor, value)); 
     map.merge(category, list, Descriptor::concat); 
    } 

    public static List<Descriptor> concat(List<Descriptor> one, 
      List<Descriptor> two) { 
     one.addAll(two); 
     return one; 
    } 
} 

我認爲你可以處理讀取和解析輸入文件自己,或者你的意圖的工作說出來分開,因爲你的問題專門詢問有關「HashMap的幫助」,並說,你有使用HashMap中的問題解決這個問題。

+0

老實說,我不知道。你能告訴我如何從文本文件中讀取值嗎? – 2014-10-28 18:33:35

+0

@Vlad這是一個不同的問題。 – 2014-10-28 19:09:18

+0

我提到過關於text.txt,忘了說從文件中讀取:)) – 2014-10-28 19:27:26