どうも、ちょげ(@chogetarou)です。
Map(マップ)の最小値のキーを取得する方法を紹介します。
方法

Map(マップ)の最小値のキーを取得する方法は、2つあります。
Collections.min()
1つは、Collections.min()を使う方法です。
まず、Collections.min()を呼び出します。
Collections.min()の第1引数にMapのentrySet()、第2引数に2つの引数を持つラムダ式を指定します。
第2引数のラムダ式で、第1引数のgetValue()から第2引数のgetValue()を引いた値を指定します。
そして、Collections.min()からgetKey()を呼び出します。
T minKey = Collections.min(map.entrySet(), (entry1, entry2) -> entry1.getValue() - entry2.getValue()).getKey();
上記のgetKey()は、Mapの最小値のキーを返します。
使用例
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Map<String, Integer> numbers = new HashMap<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);
numbers.put("zero", 0);
numbers.put("four", 4);
numbers.put("five", 5);
String minKey = Collections.min(numbers.entrySet(), (entry1, entry2) -> entry1.getValue() - entry2.getValue()).getKey();
System.out.println(minKey);
}
}
出力:
zero
stream()
もう1つは、stream()を使う方法です。
まず、MapからentrySet()、entrySet()からstream()を呼び出します。
stream()からmin()を呼び出します。
min()の引数に、第1引数のgetValue()を第2引数のgetValue()を引いた値を返すラムダ式を指定します。
そして、min()からget()、get()からgetKey()を呼び出します。
T minKey = map.entrySet()
.stream()
.min((entry1, entry2) -> entry1.getValue() - entry2.getValue())
.get()
.getKey();
上記のgetKey()は、Mapの最小値のキーを返します。
使用例
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Map<String, Integer> numbers = new HashMap<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);
numbers.put("zero", 0);
numbers.put("four", 4);
numbers.put("five", 5);
String minKey = numbers.entrySet()
.stream()
.min((entry1, entry2) -> entry1.getValue() - entry2.getValue())
.get()
.getKey();
System.out.println(minKey);
}
}
出力:
zero
まとめ
Map(マップ)の最小値のキーを取得する方法は、次の2つです。
- Collections.min()を使う方法
T minKey = Collections.min(map.entrySet(), (entry1, entry2) -> entry1.getValue() - entry2.getValue()).getKey();
- stream()を使う方法
T minKey = map.entrySet().stream().min((entry1, entry2) -> entry1.getValue() - entry2.getValue()).get().getKey();
コメント