JavaでストリームAPIを使用して要素の最大・最小値を取得する方法について記載します。
目次
要素の最大・最小値を取得する方法
max・min メソッドを使用します。
1. 最大値の取得方法
構文
max(Comparator<? super T> comparator)
戻り値
Optional<T>
まず、maxメソッドの引数に Comparator.naturalOrder() を指定して自然順に並び替えた結果の最大値を取得します。
実行例
1 2 3 4 5 6 7 8 9 10 11 |
// 数値 List<Integer> list1 = Arrays.asList(10,30,20); Optional<Integer> opNum1 = list1.stream().max(Comparator.naturalOrder()); System.out.println( opNum1.get() ); // 30 // 文字列 List<String> list2 = Arrays.asList("aaa","bb","c"); Optional<String> opStr1 = list2.stream().max(Comparator.naturalOrder()); System.out.println( opStr1.get() ); // c |
次の例では、maxメソッドの引数を以下のように指定します。
(s1, s2) -> s1.length() – s2.length()
この場合、文字列の長さが最大のものを取得します。
実行例
1 2 3 4 |
List<String> list3 = Arrays.asList("aaa","bb","c"); Optional<String> opStr2 = list3.stream().max( (s1, s2) -> s1.length() - s2.length() ); System.out.println( opStr2.get() ); // aaa |
2. 最小値の取得方法
構文
min(Comparator<? super T> comparator)
戻り値
Optional<T>
最大値と同様に、minメソッドの引数に Comparator.naturalOrder() を指定します。
以下は、自然順に並び替えた結果の最小値を取得する例になります。
実行例
1 2 3 4 5 6 7 8 9 10 11 |
// 数値 List<Integer> list1 = Arrays.asList(10,30,20); Optional<Integer> opNum1 = list1.stream().min(Comparator.naturalOrder()); System.out.println( opNum1.get() ); // 10 // 文字列 List<String> list2 = Arrays.asList("aaa","bb","c"); Optional<String> opStr1 = list2.stream().min(Comparator.naturalOrder()); System.out.println( opStr1.get() ); // aaa |
最大値と同様に、引数に以下を指定することで文字列長の最小値を取得することもできます。
(s1, s2) -> s1.length() – s2.length()
実行例
1 2 3 4 5 |
// 文字列長の最小値 List<String> list3 = Arrays.asList("aaa","bb","c"); Optional<String> opStr2 = list3.stream().min( (s1, s2) -> s1.length() - s2.length() ); System.out.println( opStr2.get() ); // c |