我在使用HashMap
时遇到问题。我有这个数据的test.txt:
[Computers]
Keyboard=10
Mouse=5
[Cars]
Lamborghini=6
BMW=3
[计算机]& [汽车]是类别,键盘,鼠标,兰博基尼和宝马都是描述符,10,5,6,3是每个描述符的值。
如何在点击按钮时在控制台或HashMap
中System.out.println("Category" + "descriptor" + value)
制作JTextArea
?
答案 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解决这个问题时遇到了问题。