用Java简单实现C#的参数为Action Function扩展方法
直接上代码
Blog.Java
public class Blog { public Blog(int id,String name) { Id=id; Name=name; } public int Id; public String Name; }
util.java
import java.util.ArrayList; import java.util.List; public final class util<T> { public static <T> void Each(List<T> list, Action<T> action) { for (T item : list) { action.invoke(item); } } public static <T> T Last(List<T> list, Func<T> func) { for (int i = list.size() - 1; i > -1; i--) { if (func.invoke(list.get(i))) { return list.get(i); } } return null; } public static <T> T First(List<T> list, Func<T> func) { for (T item : list) { if (func.invoke(item)) { return item; } } return null; } public static <T> List<T> Where(List<T> list, Func<T> func) { List<T> tempList = new ArrayList<T>(); for (T item : list) { if (func.invoke(item)) { tempList.add(item); } } return tempList; } public interface Func<T> { public boolean invoke(T o); } public interface Action<T> { public void invoke(T o); } }
测试代码
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class progrmas { public static void main(String[] args) { List<Blog> list = new ArrayList<Blog>(); list.add(new Blog(1, "blog 1")); list.add(new Blog(2, "blog 2")); list.add(new Blog(3, "blog 2")); list.add(new Blog(4, "blog 4")); List<Blog> result = new ArrayList<Blog>(); final int id = 1; // 查询 List<Blog> result2 = util.Where(list, new util.Func<Blog>() { @Override public boolean invoke(Blog blog) { return blog.Name.contains("2"); } }); //Java 8支持Lambda时,使用会相当简洁 // List<Blog> result2 = util.Where(list,(b)->b.Name.contains("2")); // 打印结果 util.Each(result2, new util.Action<Blog>() { @Override public void invoke(Blog o) { System.out.print(String.valueOf(o.Id) + "------" + o.Name); } }); //Java 8支持Lambda时,使用会相当简洁 // util.Each(result2,(b)->System.out.println(String.valueOf(b.Id) +"------" + b.Name)); } }