[Java]Map(マップ)の最大値のキーを取得するには?

Java

どうも、ちょげ(@chogetarou)です。

Map(マップ)の最大値のキーを取得する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

Map(マップ)の最大値のキーを取得する方法は、2つあります。

Collections.max()

1つは、Collections.max()を使う方法です。

まず、Collections.max()を呼び出します。

Collections.max()の第1引数にMapのentrySet()、第2引数に2つの引数を持つラムダ式を指定します。

第2引数のラムダ式で、第1引数のgetValue()から第2引数のgetValue()を引いた値を指定します。

そして、Collections.max()からgetKey()を呼び出します。

T maxKey = Collections.max(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("ten", 10);
        numbers.put("four", 4);
        numbers.put("five", 5);
        
        String maxKey = Collections.max(numbers.entrySet(), (entry1, entry2) -> entry1.getValue() - entry2.getValue()).getKey();
        
        System.out.println(maxKey);
    }
}
出力:
ten

stream()

もう1つは、stream()を使う方法です。

まず、MapからentrySet()、entrySet()からstream()を呼び出します。

stream()からmax()を呼び出します。

max()の引数に、第1引数のgetValue()を第2引数のgetValue()を引いた値を返すラムダ式を指定します。

そして、max()からget()、get()からgetKey()を呼び出します。

T maxKey = map.entrySet()
    .stream()
    .max((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("ten", 10);
        numbers.put("four", 4);
        numbers.put("five", 5);
        
        String maxKey = numbers.entrySet().stream().max((entry1, entry2) -> entry1.getValue() - entry2.getValue()).get().getKey();
        
        System.out.println(maxKey);
    }
}
出力:
ten

まとめ

Map(マップ)の最大値のキーを取得する方法は、次の2つです。

  • Collections.max()を使う方法
    T maxKey = Collections.max(map.entrySet(), (entry1, entry2) -> entry1.getValue() - entry2.getValue()).getKey();
  • stream()を使う方法
    T maxKey = map.entrySet().stream().max((entry1, entry2) -> entry1.getValue() - entry2.getValue()).get().getKey();

コメント

タイトルとURLをコピーしました