【问题标题】:HashMap help, Read from file print to console or JTextAreaHashMap 帮助,从文件打印读取到控制台或 JTextArea
【发布时间】:2014-10-28 16:32:07
【问题描述】:

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

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

其中 [Computers] 和 [Cars] 是 Category,Keyboard、Mouse、Lamborghini 和 BMW 是描述符,10、5、6、3 是每个描述符的值。

如何在控制台上或在JTextArea 中创建HashMap 以在单击按钮时创建System.out.println("Category" + "descriptor" + value)

【问题讨论】:

  • 您打算如何在地图中查找内容?按类别?通过描述符?
  • 按我想要的类别,我想。我只关心打印每个描述符的值
  • @Compass 感谢您提供的链接 Compass,我知道该链接,我们已经在那里进行了讨论.. 我不知道要编写该代码
  • @某人?可以帮我吗?

标签: java hash tags


【解决方案1】:

我认为可以使用两个级别的哈希图来完成。

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

【讨论】:

  • Compass 在这里向我解释了 link 但我不知道t know how to make the code. im 是 java 新手。
  • 你能用python工作吗?它可以很容易地在 python 中实现.. 或者你可以在哈希图中使用一对键,比如 Map, V> 或使用 Map> map = // ... //... map.get(2).get(5);
  • 没有。我选择 java 是因为我必须在 Windows 2000 桌面上运行这个程序。 Its for work... , i have a camera that can measure objects, like phones,buttons,any object. and the camera choose if the distances are good keeps the object if not she throws them. And camera wont 显示坏或好计数。它只能像我的示例中那样写入文档行 [category] ​​bad=30 (30 are 30 bad pieces) good=10 (10 are 10 good pieces)
  • 然后在哈希图中使用一对键,如 Map, V> 或使用Map<Integer, Map<Integer, V>> map =。第二个选项更适合你的问题
【解决方案2】:

你想要的是一个多重映射,一个每个键可以有多个值的映射,因为每个类别可以有多个(描述符,值)对。在一些第三方 Java 库(如 Guava)中有多重映射,但您可以使用标准 Java 集合来模拟多重映射,方法是使用映射到值列表,例如 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 解决此问题时遇到问题.

【讨论】:

  • 老实说我不知道​​。你能告诉我如何从文本文件中读取值吗?
  • @Vlad 这是一个不同的问题。
  • @Vlad 在 SE 上有很多关于从文本文件中读取的问题,like this one。搜索、思考、编写一些代码,如果您无法弄清楚,请提出问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多