直接上代码

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));
}
}

用Java简单实现C#的参数为Action<T> Function<T,boolean>扩展方法的更多相关文章

  1. 线程和线程池的理解与java简单例子

    1.线程 (1)理解,线程是系统分配处理器时间资源的基本单元也是系统调用的基本单位,简单理解就是一个或多个线程组成了一个进程,进程就像爸爸,线程就像儿子,有时候爸爸一个人干不了活就生了几个儿子干活,会 ...

  2. java自定义注解实现前后台参数校验

    2016.07.26 qq:992591601,欢迎交流 首先介绍些基本概念: Annotations(also known as metadata)provide a formalized way ...

  3. 多元线性回归----Java简单实现

    http://www.cnblogs.com/wzm-xu/p/4062266.html 多元线性回归----Java简单实现   学习Andrew N.g的机器学习课程之后的简单实现. 课程地址:h ...

  4. Java简单工厂模式

    Java简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简 ...

  5. Java基础 -- 泛型之泛型参数

    泛型机制常用的参数有3个: “?”代表任意类型.如果只指定了<?>,而没有extends,则默认是允许任意类. extends关键字声明了类型的上界,表示参数化的类型可能是所指定的类型,或 ...

  6. 2.5万字长文简单总结SpringMVC请求参数接收

    这是公众号<Throwable文摘>发布的第22篇原创文章,暂时收录于专辑<架构与实战>.暂定下一篇发布的长文是<图文分析JUC同步器框架>,下一篇发布的短文是&l ...

  7. java简单词法分析器(源码下载)

    java简单词法分析器 : http://files.cnblogs.com/files/hujunzheng/%E7%AE%80%E5%8D%95%E8%AF%8D%E6%B3%95%E5%88%8 ...

  8. !!转!!java 简单工厂模式

    举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就是 ...

  9. Java 简单登录MVC

    构建一个简单的基于MVC模式的JavaWeb 零晨三点半了,刚刚几个兄弟一起出去吼歌,才回来,这应该是我大学第二次去K歌,第一次是大一吧,之后每次兄弟喊我,我都不想去,因为我还是很害怕去KTV,或许是 ...

随机推荐

  1. android softinput 相关

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN | WindowManager.Layo ...

  2. Web自动化框架LazyUI使用手册(1)--框架简介

    作者:cryanimal QQ:164166060 web端自动化简介 web端自动化,即通过自动化的方式,对Web页面施行一系列的仿鼠标键盘操作,以达到对Web页面的功能进行自动化测试的目的. 其一 ...

  3. 一张图看Goodle Clean设计架构

    之前用一张图分析了Google给出的MVP架构,但是在Google给出的所有案例里面除了基本的MVP架构还有其它几种架构,今天就来分析其中的Clean架构.同样的,网上介绍Clean架构的文章很多,我 ...

  4. 解决在 使用 AjaxFileUploder 插件时,不能获取返回的 json 结果数据

    在MVC  项目 中使用 AjaxFileUploader 这个插件时,在上传图片或文件时,在控制器中返回的是 json数据,可是在 ie,或 googleChrome 浏览器中却出现 返回的json ...

  5. Java 动态编译组件 & 类动态加载

    1.JDK6 动态编译组件 Java SE 6 之后自身集成了运行时编译的组件:javax.tools,存放在 tools.jar 包里,可以实现 Java 源代码编译,帮助扩展静态应用程序.该包中提 ...

  6. 用命令实现Win7远程桌面关机和重启

    关机 shutdown -s -t 0 重启 shutdown -r -t 0 打开运行框(Win+R键),输入上述命令即可,后面的数字表示关机/重启延迟的时间 at 12:00 shutdown - ...

  7. 详解android.mk-2016.01.18

    1 Android.mk作用 当使用JNI开发时,我们需要创建一个native工程,Android.mk就是一个makefile的配置文件,帮助我们把编写的C/C++代码编译成动态或者静态的链接库. ...

  8. 【MariaDB】MariaDB编译参数

    参考: http://wangfeng7399.blog.51cto.com/3518031/1393146?utm_source=tuicool http://www.phperz.com/arti ...

  9. DEDE的data目录名称修改方法

    DEDE的data目录名称修改方法 为了最大限度的减少网站被攻击的可能,需要将data目录改名,具体操作如下: 1.修改include目录下的common.inc.php这个文件.打开文件,找到第16 ...

  10. javascript 详解数组

      概念 数组创建 数组读写 数组 VS. 一般对象 相同点 不同点 稀疏数组 数组的length属性 元素增删 数组迭代 二维数组 数组方法 Array.prototype.join Array.p ...