Google guava-libraries の Function Predicate Joiner
Function
Function で List の要素を変換して、ループの記述無しで新しい List を作成する。
変換する条件は Function の applyメソッドに記述する。
import java.util.List; import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.collect.Lists; public class test { public static void main(String[] argv) { final List<Integer> list1 = Lists.newArrayList(5, 6, 7, 8); final List<String> list2 = Lists.transform(list1, new Function<Integer,String>() { public String apply(Integer src) { return "foo" + (src > 4 ? src - 4 : src); } }); System.out.println(Joiner.on(", ").join(list2)); } }
Joiner.on(セパレータ).join(リスト) でリストの要素を指定セパレータで区切った文字列を返す。
実行結果
foo1, foo2, foo3, foo4
Predicate
Predicate で List にフィルターをかける。
フィルターの条件は Predicate の applyメソッドに記述する。(フィルター処理部分を関数化)
import java.util.List; import com.google.common.base.Predicate; import com.google.common.base.Joiner; import com.google.common.collect.Lists; import com.google.common.collect.Iterables; public class test2 { public static void main(String[] argv) { final List<String> list = Lists.newArrayList(null, "foo2", "bar1", null, "foo5"); final Iterable<String> foo = Iterables.filter(list, new Predicate<String>() { public boolean apply(String src) { return src != null && src.startsWith("foo"); } }); System.out.println(Joiner.on(": ").join(foo)); final Iterable<String> bar = Iterables.filter(list, new Predicate<String>() { public boolean apply(String src) { return src == null || src.startsWith("bar"); } }); System.out.println(Joiner.on(": ").useForNull("bar99").join(bar)); } }
Joiner.on(セパレータ).useForNull(nullの時の出力文字列).join(リスト) で
リストの要素(nullの時に指定文字列に置き換え)を指定セパレータで区切った文字列を返す。
実行結果
foo2: foo5 bar99: bar1: bar99
Lists Collections2 Sets Iterables Maps にある指定可能な static メソッドで使える。