HashMap帮助,从文件打印读取到控制台或JTextArea [英] HashMap help, Read from file print to console or JTextArea

查看:117
本文介绍了HashMap帮助,从文件打印读取到控制台或JTextArea的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

pre $ [计算机]
键盘= 10
鼠标= 5
[汽车]
兰博基尼= 6
宝马= 3

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

我该如何制作一个 HashMap 可以在控制台上或在 System.out.println(Category+descriptor+ value) code> JTextArea 点击一个按钮?

解决方案

你想要的是一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆