以下はHashMapに含まれる値です。
statusName {Active=33, Renewals Completed=3, Application=15}
最初のキーを取得するためのJavaコード(すなわちアクティブ)
Object myKey = statusName.keySet().toArray()[0];
どうやって最初のキー "Value"(33)を集めることができますか? "Key"と "Value"の両方を別々の変数に格納したいのです。
これを試すことができます:
Map<String,String> map = new HashMap<>();
Map.Entry<String,String> entry = map.entrySet().iterator().next();
String key = entry.getKey();
String value = entry.getValue();
HashMap
は挿入順序を保証するものではありません。順序をそのままにするにはLinkedHashMap
を使用します。
例えば:
Map<String,String> map = new LinkedHashMap<>();
map.put("Active","33");
map.put("Renewals Completed","3");
map.put("Application","15");
Map.Entry<String,String> entry = map.entrySet().iterator().next();
String key= entry.getKey();
String value=entry.getValue();
System.out.println(key);
System.out.println(value);
出力:
Active
33
「最初の」値を取得するには
map.values().toArray()[0]
"first"キーの値を取得するには
map.get(map.keySet().toArray()[0])
注:上記のコードはテスト済みで動作します。
HashMapエントリーは順序付けされていないので、私は "first"と言います。
ただし、LinkedHashMapは、エントリが挿入されたときと同じ順序でエントリを繰り返します。挿入順序が重要な場合は、マップの実装にそれを使用できます。
Java 8のやり方、
String firstKey = map.keySet().stream().findFirst().get();
最初のKey "Value"(33)を集めるにはどうすればよいですか
youMap.get(keyYouHave)
を使うことで、あなたはそれの価値を得ることができます。
"Key"と "Value"の両方を別々の変数に格納したい
はい、それを変数に代入することができます。
待って.........それは終わっていない。
あなた(ビジネスロジック)が挿入と検索の順序に依存しているなら、あなたは奇妙な結果を見ることになるでしょう。地図は順序付けされていません順序で格納されません。そのことを知っておいてください。あなたの注文を保存するためにいくつかの代替手段を使用してください。おそらく LinkedHashMap
最初のエントリ全体を取得するためにこれを試すこともできます。
Map.Entry<String, String> entry = map.entrySet().stream().findFirst().get();
String key = entry.getKey();
String value = entry.getValue();
これは最初のエントリーのキーだけを得るために、
String key = map.entrySet().stream().map(Map.Entry::getKey).findFirst().get();
// or better
String key = map.keySet().stream().findFirst().get();
これは最初のエントリの値だけを得るために、
String value = map.entrySet().stream().map(Map.Entry::getValue).findFirst().get();
// or better
String value = map.values().stream().findFirst().get();
さらに、自分が何をしているのかを知っていて、地図の2番目の項目(3番目の項目も同じ)を取得したい場合は、これを試してください。
Map.Entry<String, String> entry = map.entrySet().stream().skip(1).findFirst().get();
String key = map.keySet().stream().skip(1).findFirst().get();
String value = map.values().stream().skip(1).findFirst().get();
一般的に言えば、挿入順序はマップ内では尊重されないことを忘れないでください。これを試して :
/**
* Get the first element of a map. A map doesn't guarantee the insertion order
* @param map
* @param <E>
* @param <K>
* @return
*/
public static <E,K> K getFirstKeyValue(Map<E,K> map){
K value = null;
if(map != null && map.size() > 0){
Map.Entry<E,K> entry = map.entrySet().iterator().next();
if(entry != null)
value = entry.getValue();
}
return value;
}
私はそれがmap.size() == 1
であると確信できるときだけこれを使います。
HashMap
sがHashMap
sに順序付けられていないため、ロジックフローがCollection
要素へのアクセス順序に依存してはならないことに注意する必要があります。 ( この記事 で、ソートされたコレクションとソーターコレクションについてもっと読むことができます)。
投稿に戻ると、あなたはすでに最初の要素のキーをロードすることによって仕事の半分をしました:
Object myKey = statusName.keySet().toArray()[0];
それぞれの値を取得するためにmap.get(key)
を呼び出すだけです。
Object myValue = statusName.get(myKey);
Whoamiの回答を改善するfindFirst()
はOptional
を返すので、値があるかどうかをチェックするのは良い習慣です。
var optional = pair.keySet().stream().findFirst();
if (!optional.isPresent()) {
return;
}
var key = optional.get();
また、HashSet
の最初のキーを見つけるのは信頼できないとのコメントもありました。しかし時にはHashMap
のペアがあります。つまり、各マップには1つのキーと1つの値があります。そのような場合、そのようなペアの最初のキーをすばやく見つけることは便利です。