3

我的 c: 中有以下名为 ght.txt 的文件,它包含以下数据

Id|ytr|yts
1|W|T
2|W|T
3|W|T

现在的问题是,此列 (Id|ytr|yts) 的位置也不是按顺序排列的,这意味着它们也可以重新洗牌..例如

Id|ytr|dgfj|fhfjk|fgrt|yts

或者他们可以是..

Id|wer|ytr|weg|yts

所以我做了以下方式并在java中读取它们如下所示

String[] headers = firstLine.split("|");
int id, Ix, Ixt, count = 0;

for(String header : headers) {
    if(header.equals("Id")) {
        idIx = count;
    }elseif (header.equals("Ix")) {
        Ixt = count;
    } elseif (header.equals("Ixt")) {
        Ixt = count;
    }
    count++;
}

现在我需要以这样的方式将它们存储在地图中,以便针对 id 我将获得列 ytr 和 yts 的值,因此在地图中应该有单个键,但针对该键值可能是多个请告知如何在地图中存储这样的方式

4

6 回答 6

6

使用Map<Integer,List<String>>听起来像是可行的第一种方法。

听起来您的价值是结构化的,因此创建一个价值类来保存它可能会更好,例如。Map<Integer, YourValueClass>在哪里

class YourValueClass
{
    String ix;
    String ixt;

    // constructor, getters and setters
}

基本上,您应该考虑类/对象 - 不要拒绝对象:-)

干杯,

于 2013-11-11T08:49:31.823 回答
3

我不太清楚你的意思,但如果我理解正确,你正在寻找一个多图。

正如@Anders R. Bystrup 建议的那样,您可以自己滚动一个。
或者您可以使用现有的实现,例如Google Collections Multimap。

于 2013-11-11T08:50:58.533 回答
2

不要存储一个键和多个值。相反,您可以将键和值存储为列表。

于 2013-11-11T08:49:46.917 回答
1

价值等级

class TextValues {
    final int id;
    final String ix;
    final String ixt;

    private TextValues(final int id, final String ix, final String ixt){
        this.id = id;
        this.ix = ix;
        this.ixt = ixt;
    }    

    public static TextValues createTextValues(int id, String ix, String ixt) {
        return new TextValues(id, ix, ixt);
    }    
}

用法:

Map<Integer, TextValues> map = new HashMap<Integer, TextValues>();
map.put(1, TextValues.createTextValues(1, "ix value ", "ixt value"));
于 2013-11-11T09:09:07.660 回答
0

您可以MultiMapGuava Library使用:

MultiMap<String,String> map = ArrayListMultimap.create();
map.put("key","value1");
map.put("key","value2");

通过使用:

System.out.println(map.get("key");

印刷:

["value1","value2"]
于 2013-11-11T08:52:45.747 回答
0
 public static void main(String[] args) {

Map<String, List<String>> map = new HashMap<String, List<String>>();

List<String> valSetOne = new ArrayList<String>();
valSetOne.add("ABC");
valSetOne.add("BCD");
valSetOne.add("DEF");

List<String> valSetTwo = new ArrayList<String>();
valSetTwo.add("CBA");
valSetTwo.add("DCB");

map.put("FirstKey", valSetOne);
map.put("SecondKey", valSetTwo);

for (Map.Entry<String, List<String>> entry : map.entrySet()) {

    String key = entry.getKey();

    List<String> values = entry.getValue();

    System.out.println("Value of " + key + " is " + values);

}

}

您可以根据您的要求使用 Set 或 List ,即您需要有序或无序集合中的元素。这是一种具有多个值的单个键的简单方法。

于 2018-08-08T06:55:40.340 回答