リストからストリーム。ストリームからイントストリーム。んで計算w
Streamインタフェースを使って、リストの文字列をintへ変換して平均値を求めるサンプル
文字列のリストをintへ変換してIntStreamへ持ち込みます。
あとは、平均値を計算した結果を出力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import java.util.Arrays; import java.util.List; public class StreamTest2 { public static void main(String[] args) { List<String> numList = Arrays.asList("1", "2", "3", "4", "5"); //ストリームAPIでリストから平均値を求める double average = numList.stream() .mapToInt(Integer::parseInt) //IntStreamへ変換 .average() //平均値を算出 .getAsDouble(); //doubleへ変換 //結果を表示 System.out.println("平均値は... " + average); } } |
実行結果
1 | 平均値は... 3.0 |
サンプルの解説
今回は、ListからStream。さらにStreamからIntStreamへ持っていく例です。
ということで、平均値を求める云々はあまり大事なとこではありませんw
List#stream() ※正しくはCollection#stream()
List#stream()を使うことで、ストリームAPIへ持ち込むことができます。
Stream#mapToInt(ToIntFunction)
ここでリストの文字列をintへ変換することで、StreamからIntStreamへ持っていってます。
引数には、IntStreamへ持ち込む(≒各値をintへ変換する)方法を指定します。
この例では、mapToIntの引数であるToIntFunction関数インタフェースのメソッドの型(引数・返値)とInteger.parseInt()の型が一緒なのでそのまま利用しています。
IntStream#average()
平均値を求めてます。そのままですw
ただし、返り値はOptionalDoubleです。
OptionalDouble#getAsDouble()
ここでdoubleへ変換してます。
余談ですが、orElse()を使うとnullなときにデフォルト値をセットすることもできます。この例ではありえないですが。。