以下のコードはID:にゃんこクラスのマップのルックアップ関数とにゃんこクラスからそのにゃんこ情報のStringに変更する関数を合成したものと,
そのにゃんこ情報列からmで始まりかつみけねこである条件でフィルタをかける例.
package org.tanuneko;
import com.google.common.base.Function;
import com.google.common.base.Functions;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Collections2;
import java.util.*;
public class Nekosagashi {
public static void main(String args[]) {
new Nekosagashi();
}
public Nekosagashi() {
Map<Integer,Cat> neko = getMap();
Function<Integer,Cat> lookup = Functions.forMap(neko);
Function<Cat,String> patExt = new CatInfoExt();
Function<Integer,String> getCatInfoAsStringByID = Functions.compose(patExt, lookup);
List<Integer> vals = Arrays.asList(IVAL(1),IVAL(2),IVAL(3),IVAL(4));
Collection<String> nekos = Collections2.transform(vals, getCatInfoAsStringByID);
Collections2.filter(nekos,
Predicates.and(new IsStartWithM(), new IsMikeneko()))
.forEach(System.out::println);
}
class IsStartWithM implements Predicate<String> {
@Override
public boolean apply(String input) {
return input.toLowerCase().startsWith("m");
}
}
class IsMikeneko implements Predicate<String> {
@Override
public boolean apply(String input) {
return input.toLowerCase().contains("mike");
}
}
class Decorator implements Function<String,String> {
@Override
public String apply(String input) {
return "***" + input + "***";
}
}
class CatInfoExt implements Function<Cat,String> {
@Override
public String apply(Cat input) {
return input.getName() + ":" + input.getPattern();
}
}
public Map<Integer,Cat> getMap() {
Map<Integer,Cat> map = new HashMap<>();
map.put(1, new Cat("Powder", "seiyoumike"));
map.put(2, new Cat("Machiko", "orangemike"));
map.put(3, new Cat("Torachan", "chatora"));
map.put(4, new Cat("Mikeyo", "wafumike"));
return map;
}
class Cat {
private String name;
private String pattern;
public Cat(String name, String pattern) {
this.name = name;
this.pattern = pattern;
}
public String getName() { return name; }
public String getPattern() { return pattern; }
}
private static Integer IVAL(int i) {
return new Integer(i);
}
}
そしてこれはうちのめんこいにゃんこ.
