你想要的是一个multimap,一个可以为每个键有多个值的映射,因为每个类别都可以有多个(描述符,值)对。在某些第三方Java库(如Guava)中有多个映射,但您可以使用映射到值列表(如Map<String, List<Descriptor>>
,其中Descriptor
是包含(描述符,价值)对。
在Java 8中添加到Map
的merge
方法对于构建这样的映射非常有效。
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中的问题解决这个问题。
你打算如何在地图上查找东西?按类别?通过描述符? – 2014-10-28 17:16:18
按类别我想,我想。我只是为了打印每个描述符的值 – 2014-10-28 17:24:00
链接到[HashMap实现问题...](http://stackoverflow.com/a/26611687/2958086) – Compass 2014-10-28 17:28:24