在单个键的映射中存储多个值

时间:2013-11-11 08:46:49

标签: java map

我的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的值,所以在map中应该有单键但是反对那个键值可能是多个请告知如何存储以这种方式在地图中

6 个答案:

答案 0 :(得分:6)

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

听起来你的价值是结构化的,创造一个价值类来保持这个可能更好,例如。 Map<Integer, YourValueClass>其中

class YourValueClass
{
    String ix;
    String ixt;

    // constructor, getters and setters
}

基本上,你应该考虑类/对象 - 不要在object denial中: - )

干杯,

答案 1 :(得分:3)

我不太清楚你的意思,但如果我做对了,你就是在寻找一个多图。

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

答案 2 :(得分:2)

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

答案 3 :(得分: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"));

答案 4 :(得分:0)

您可以使用Guava Library中的MultiMap

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

使用:

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

打印:

["value1","value2"]

答案 5 :(得分: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,即您需要有序或无序集合中的元素。这是具有多个值的单个键的简单方法。