今回は その2 で作ったプログラムの年齢とバストサイズでフィルタリングし、ファイティングパワーで昇順ソートして生成した List を操作してみます。
といっても何も大したことはしていません。
とりあえず下記コードを追加しました。
| jp\yucchi\mylambdasample\MyLambdaSample.java |
// MyBestMember の FightingPower の要素数を取得
System.out.println("<-- MyBestMember の FightingPower の要素数を取得 -->");
long count = member.parallelStream().filter(m -> m.getGender() == MyTeam.Sex.FEMALE
&& m.getAge() >= 16
&& m.getAge() <= 29
&& m.getBreast() >= 76)
.map(MyTeam::getFightingPower)
.count();
System.out.println("要素数は " + count + " です。");
// MyBestMember の FightingPower 最初の要素を取得 (最小値)
System.out.println("<-- MyBestMember の FightingPower 最初の要素を取得 -->");
int collect = member.parallelStream().filter(m -> m.getGender() == MyTeam.Sex.FEMALE
&& m.getAge() >= 16
&& m.getAge() <= 29
&& m.getBreast() >= 76)
.map(MyTeam::getFightingPower)
.sorted(Integer::compareTo)
.collect(Collectors.toList()).get(0);
System.out.println(collect);
// MyBestMember の FightingPower 最後の要素を取得 (最大値)
System.out.println("<-- MyBestMember の FightingPower 最後の要素を取得 -->");
int collect2 = member.parallelStream().filter(m -> m.getGender() == MyTeam.Sex.FEMALE
&& m.getAge() >= 16
&& m.getAge() <= 29
&& m.getBreast() >= 76)
.map(MyTeam::getFightingPower)
.sorted(Integer::compareTo)
.collect(Collectors.toList()).get((int) (count - 1));
System.out.println(collect2);
// MyBestMember の FightingPower 全要素を表示
System.out.println("<-- MyBestMember の FightingPower 全要素を取得 -->");
List collect3 = member.parallelStream().filter(m -> m.getGender() == MyTeam.Sex.FEMALE
&& m.getAge() >= 16
&& m.getAge() <= 29
&& m.getBreast() >= 76)
.map(MyTeam::getFightingPower)
.sorted(Integer::compareTo)
.collect(Collectors.toList());
System.out.println(collect3);
}
}
要素数は stream オブジェクトのエレメント数を count() メソッドで取得しただけです。
戻り値が long なので要注意です。
これを利用して新しく生成された List<Integer> オブジェクトを操作して最小値と最大値を求めています。
ここで long の count を int にキャストしているのがちょっとアレですね・・・
もっとスマートな方法があるのかもしれません。
最後は新しく生成された List<Integer> オブジェクトを表示させただけです。
結局、stream でゴニョゴニョやってそれで新しい List にしてしまえば今までどおりチョメチョメ操作できてしまうってことかな?
ほとんど Lambda とは関係ない内容になってますが stream オブジェクトの要素数の取り方ってことでお茶を濁します。( ̄。 ̄;)
あっ、ちなみに実行結果は次のようになります。
<– MyBestMember の FightingPower の要素数を取得 –>
要素数は 7 です。
<– MyBestMember の FightingPower 最初の要素を取得 –>
66
<– MyBestMember の FightingPower 最後の要素を取得 –>
89
<– MyBestMember の FightingPower 全要素を取得 –>
[66, 75, 76, 80, 85, 85, 89]