火曜日, 11月 24, 2015

ねこ。。

google guavaの関数の合成やtransformを使ってみた.(今さらながら。。)
以下のコードは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);
    }
}

そしてこれはうちのめんこいにゃんこ.

0 件のコメント: