HashMap帮助,从文件打印到控制台或JTextArea读取

时间:2014-10-28 16:32:08

标签: java hash tags

我在使用HashMap时遇到问题。我有这个数据的test.txt:

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

[计算机]& [汽车]是类别,键盘,鼠标,兰博基尼和宝马都是描述符,10,5,6,3是每个描述符的值。

如何在点击按钮时在控制台或HashMapSystem.out.println("Category" + "descriptor" + value)制作JTextArea

2 个答案:

答案 0 :(得分:0)

我认为可以使用两级哈希映射来完成。

在第一个hashmap级别,使用category作为键,对于其值,使用另一个hashmap,其键将是描述符。

答案 1 :(得分:0)

你想要的是一个multimap,一个可以为每个键设置多个值的映射,因为每个类别可以有多个(描述符,值)对。某些第三方Java库(例如Guava)中有多个映射,但是您可以使用映射到值列表来模拟标准Java集合,例如Map<String, List<Descriptor>>,其中Descriptor是包含(描述符,值)对的类型。

在Java 8中添加到Map的{​​{3}}方法对于构建此类地图非常有效。

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;
    }
}

我假设您可以自己处理读取和解析输入文件,或者您打算单独处理输入文件,因为您的问题特别询问了&#34; HashMap帮助&#34;并说使用HashMap解决这个问题时遇到了问题。

相关问题