HashMap帮助,从文件打印读取到控制台或JTextArea [英] HashMap help, Read from file print to console or JTextArea
问题描述
使用 HashMap
时遇到问题。我有test.txt这个数据:
pre $ [计算机]
键盘= 10
鼠标= 5
[汽车]
兰博基尼= 6
宝马= 3
[Computers]& [汽车]是类别,键盘,鼠标,兰博基尼和宝马是描述符,而10,5,6,3是每个描述符的值。
我该如何制作一个 HashMap
可以在控制台上或在
你想要的是一个multimap,由于每个类别可以有多个(描述符,值)对,因此每个键可以有多个值的映射。在某些第三方Java库(如Guava)中有多个映射,但是您可以使用映射到值列表的映射来模拟标准Java集合,例如映射<字符串,列表<描述符> >
,其中描述符
是一个包含(描述符,值)对的类型。
Map 中的方法=nofollow> 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;
公共类描述符{
私有最终字符串描述符;
private final int value;
公共描述符(字符串描述符,int值){
this.descriptor = Objects.requireNonNull(描述符);
this.value = value;
}
public String getDescriptor(){
返回描述符;
}
public int getValue(){
返回值;
}
@Override public String toString(){
return descriptor +,+ value;
}
public static void main(String [] args){
//创建映射表(本质上是一个multimap
Map< String,List< Descriptor>> map(map),new HashMap<>();
insert(map,Computers,Keyboard,10);
insert(map,Computers,Mouse );
insert(地图,Cars,Lamborghini,6);
insert(地图,Cars,BMW,3);
//显示所有类别描述符
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 ){
//使用Map.merge $ b $插入项目b $ b List< Descriptor> list = new ArrayList<>();
list.add(new Descriptor(descriptor,value) );
map.merge(category,list,Descriptor :: concat);
}
public static List< Descriptor> concat(List<描述符> 1,
List< Descriptor> two){
one.addAll(two);
返回一个;
$ b $ p
$ b我假设你可以处理读取和解析输入自行申报,或者你打算单独解决这个问题,因为你的问题专门询问HashMap帮助,并说你使用HashMap解决这个问题有问题。
I'm having a problem using HashMap
. I have test.txt with this data:
[Computers]
Keyboard=10
Mouse=5
[Cars]
Lamborghini=6
BMW=3
where the [Computers] & [Cars] are Category, Keyboard, Mouse, Lamborghini and BMW are descriptors, and 10, 5, 6, 3 are values for each descriptor.
How can I make a HashMap
that can System.out.println("Category" + "descriptor" + value)
on console or in JTextArea
when clicking a button?
解决方案 What you want is a multimap, a map that can have more than one value for each key, since you can have multiple (descriptor, value) pairs for each category. There are multimaps in some third party Java libraries such as Guava, but you can emulate one with the standard Java collections by using a map to a list of values, such as a Map<String, List<Descriptor>>
, where a Descriptor
is a type that contains a (descriptor, value) pair.
The merge
method that was added to Map
in Java 8 is effective for building such a map.
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;
}
}
I assume that you can handle reading and parsing the input file yourself, or that you intent to work that out separately, since your question specifically asks about "HashMap help" and says that you have a problem using HashMap to solve this problem.
这篇关于HashMap帮助,从文件打印读取到控制台或JTextArea的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!