如何从多图中提取单个字符串值?

时间:2014-06-08 01:15:30

标签: java guava

我的地图声明为:

 ListMultimap<String, String> myMutlimap = ArrayListMultimap.create();

我已经能够只打印键了:

TEN   
TT2
TP1
TP2
TRK
TAL
COM
COM
COM
TCO
TPA
TYE

或值或键和值:

TEN=children's story
TT2=black star
TP1=black star
TP2=5/13
TRK=This old album
COM=This album is good
COM=This album is great
COM=This album is awesome
TCO=hip-hop
TPA=1/2
TYE=2002

但是,当我尝试列出&#34; COM&#34;的价值时我得到的关键:

[This album is good, This album is great, This album is awesome ]

如何获得&#34; COM&#34;的各个值?键而不依赖于字符串拆分&#34; =&#34;签字?我想如果我可以在同一行上获得键和值,它也可以很容易地将它们分配给变量。

TEN children's story
TT2 black star
TP1 black star
TP2 5/13                                            
COM This album is good
COM This album is great
COM This album is awesome
or    
COM This album is good
    This album is great
    This album is awesome

我知道我可以使用这些键和值作为变量的方法,但是,我正在寻找一种干净简洁的方法来做到这一点 - 这也打印得很好。

编辑: 根据我的要求,我尝试了一些方法:

for (Object key : myMutlimap.keys()) {
        System.out.println(key);

    }

    for (Object value : myMutlimap.values()) {
        System.out.println(value);

    }

    for (Object value : myMutlimap.entries()) {
        System.out.println(value.toString());
    }

    for (String value : myMutlimap.keySet()) {
        System.err.println(value);
        System.out.println(myMutlimap.get("COM"));
    }

2 个答案:

答案 0 :(得分:3)

只需使用get()并迭代它返回的列表即可单独获取值。

List<String> values = myMutlimap.get("COM");
for (String s: values) {
    System.out.println(s);
}

答案 1 :(得分:1)

你没有使用Multimap的类型参数(甚至是方法的返回类型),所以当然Object不会让你失望远。

使用Multimap<String, String>的实例,您可以使用以下(有趣的)方法:

  • Map<String, Collection<String>> asMap()获取Map视图,其中每个键都包含值集合
  • Collection<Map.Entry<String, String>> entries()获取各个条目,即每个(键,值)对
  • Collection<String> get(String key)获取给定密钥的所有值
  • Multiset<String> keys()获取所有没有重复项的密钥能够知道每个密钥与每个密钥相关联的数量
  • Set<String> keySet()获取Set个密钥,同样没有重复
  • Collection<String> values()获取Multimap中存在的所有值的集合,而不知道它们与哪个键相关联

知道如果你想打印给定键的值,你只需要这样做:

for (String value : myMultimap.get("COM")) {
    System.out.println(value);
}

如果要对所有可用键执行相同操作,可以使用以下几种方法:

  1. 迭代键并查找其值:

    for (String key : myMultimap.keySet()) {
        for (String value : myMultimap.get(key)) {
            System.out.println(key + " " + value);
        }
    }
    
  2. 迭代Multimap((键,值)对的条目:

    for (Map.Entry<String, String> entry : myMultimap.entries()) {
        String key = entry.getKey(), value = entry.getValue();
        System.out.print(key + " " + value);
    }
    
  3. 迭代Map视图的条目:

    for (Map.Entry<String, Collection<String>> entry :
                 myMultimap.asMap().entrySet()) {
        String key = entry.getKey();
        Collection<String> values = entry.getValue();
        for (String value : values) {
            System.out.println(key + " " + value);
        }
    }
    

    这种方法的优点是可以访问每个键的值集合(因此你有一个很好的集合及其所有可用的方法,如size(),或者可以进一步操作),比如选项1,,而不需要在每个密钥的Multimap中进行额外查找。