2014-10-28 58 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