NetBeans 8 Dev を使って Lambda で遊ぶ その4
今回は その2 で作ったプログラムの年齢とバストサイズでフィルタリングし、ファイティングパワーで昇順ソートして生成した List を操作してみます。
といっても何も大したことはしていません。
とりあえず下記コードを追加しました。
jp\yucchi\mylambdasample\MyLambdaSample.java |
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
// 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<Integer> 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]
Trackback URL