あるクラスのオブジェクトのリストを別のクラスのリストに変換する、
FluentIterable.transformメソッドのサンプルコードです。
変換前のクラスとして
FluentIterable.filterメソッドの紹介で使ったWarriorクラスを再度使用します。
class Warrior {
public Warrior(String name, Integer hp, Long exp){
this.name = name;
this.hp = hp;
this.exp = exp;
}
public String name;
public Integer hp;
public Long exp;
}
変換後のクラスで以下を使用します。
class RedMage {
public String name;
public Integer hp;
public Integer mp;
public Long exp;
}
Warriorと比べるとmpというメンバ変数が追加されています。
変換処理を定義するため、3章で紹介したFunctionクラスを以下の通り実装します。
class JobChange implements Function<Warrior, RedMage> {
@Override
public RedMage apply(Warrior warrior) {
RedMage mage = new RedMage();
mage.name = warrior.name;
mage.hp = warrior.hp / 2;
mage.mp = 50 - warrior.hp;
mage.exp = warrior.exp;
return mage;
}
}
上記で、WarriorをRedMageに変換しています。その際以下の処理をしています。
- hpを半分にする。
- 50からhpを引いた数値をmpとする。
テストコードは以下になります。
Warrior w1 = new Warrior("bartz", 30, 123L);
Warrior w2 = new Warrior("lenna", 10, 123L);
Warrior w3 = new Warrior("faris", 20, 123L);
Warrior w4 = new Warrior("galuf", 40, 123L);
List<Warrior> warriorList = Lists.newArrayList(w1, w2, w3, w4);
Iterable<RedMage> transformedList = FluentIterable.from(warriorList).transform(new JobChange()).toList();
for(RedMage mage : transformedList) {
System.out.println("name = " + mage.name + ", hp = " + mage.hp + ", mp = " + mage.mp);
}
fromに変換したいWarriorのリストを設定し、transform1に変換の定義を設定し、さらにtoList()とすることで、
結果リストを取得しています。
出力した結果は以下になります。
name = bartz, hp = 15, mp = 20
name = lenna, hp = 5, mp = 40
name = faris, hp = 10, mp = 30
name = galuf, hp = 20, mp = 10
hpとmpが変換された新しいクラスのリストが作られた事が確認できました。
最終更新:2014年01月27日 00:50