2016-10-31 6 views
-1

JavaのHashMapの値からキーを取得する簡単な方法がないようです。私が見つけたのは私が理解していないか、値からキーを得る実際のプロセスを説明していないが、使用するツールを説明している。JavaのHashmapの値からキーを簡単に取得するには

+2

1つではありません。 HashMapsはキーから値を取得するように設計されています。しかし、遅いO(n)のハッキーな方法があります。 –

+0

同じ値を参照するキーが多数ある可能性があります。 – FatalError

+0

イテレータを使用すると、すべてのキーと値を取得できます。 – Shailesh

答えて

4

マップはクイックキー→値検索を持つように設計されていますが、その逆もありません。

  1. キーが指定された値が必要な場合は、簡単な解決策の1つは、逆マッピングを持つ2番目のパラレルマップを作成することです。 AからB、AからBの2つのマップがあります。
  2. GoogleのGuava libraryを使用すると、両方向のルックアップをサポートするBiMapを使用できます。

通常のマップでこれを行う場合は、すべてのエントリを反復処理する必要があります。同じ値を持つ複数のキーがある可能性があるので、その値を考慮する必要があります。

Key秒からValue秒までのマップがあるとします。

Map<Key, Value> map = ...; 

あなたが書くことができJava 8 streamsを使用して:あなたは、唯一の一致する値が常にあります知っていればうまくいくでしょう

Key key = map.entrySet().stream() 
    .filter(entry -> entry.getValue() == value) 
    .map(entry -> entry.getKey()) 
    .findAny() 
    .orElseThrow(NoSuchElementException::new); 

。複数ある場合は、キーのコレクションを構築できます。

Set<Key> keys = map.entrySet().stream() 
    .filter(entry -> entry.getValue() == value) 
    .map(entry -> entry.getKey()) 
    .collect(Collectors.toSet()); 
関連する問題