用Java简单实现C#的参数为Action<T> Function<T,boolean>扩展方法

直接上代码

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));
    }
}
原文地址:https://www.cnblogs.com/piaolingzxh/p/4118967.html