TIntObjectHashMap - 获取给定值的键

时间:2014-09-30 11:50:46

标签: java hashmap trove4j

如何从Trove TIntObjectHashMap获取存在且已在地图中找到的值?

if(map.containsValue(source)) {
        for (Entry<Integer, String> entry : map.entrySet()) { // entrySet() is not recognized by Trove? and i can not find any corresponding method ??
            if (entry.getValue().equals(source)) {
                entry.getKey();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我会做这样的事情:

TIntObjectMap<String> map = new TIntObjectHashMap<>();
map.put( 1, "a" );
map.put( 2, "b" );

AtomicInteger found = new AtomicInteger( -1 );
map.forEachEntry( new TIntObjectProcedure<String>() {
    @Override
    public boolean execute( int key, String value ) {
        if ( value.equals( "a" ) ) {
            found.set( key );
            return false;
        }
        return true;
    }
} );
System.out.println( "Found: " + found.get() );

要记住的事情:

  1. 显然可能有多个具有相同值的键。
  2. forEach *方法是遍历Trove集合的最有效方法。
  3. 如果对象分配对您来说是性能问题,则可以重复使用这些过程。
  4. 如果“-1”(或其他任何内容)是地图的有效密钥,您可以使用另一个AtomicBoolean来指示您是否找到了该值。

答案 1 :(得分:0)

你可以这样试试

TIntObjectHashMap<String> map = new TIntObjectHashMap<>();
map.put(1, "a");
map.put(2, "b");
//convert   TIntObjectHashMap to java.util.Map<Integer,String>
Map<Integer, String> utilMap = new HashMap<>();
for (int i : map.keys()) {
    utilMap.put(i, map.get(i));
}
Integer key=null;
if (map.containsValue("a")) {
    for (Map.Entry<Integer, String> entry : utilMap.entrySet()) { // issue solved
         if (entry.getValue().equals("a")) {
            key=entry.getKey();
           }
      }
}
System.out.println(key);

Out put:

1