用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));
}
}
用Java简单实现C#的参数为Action<T> Function<T,boolean>扩展方法的更多相关文章
- 线程和线程池的理解与java简单例子
1.线程 (1)理解,线程是系统分配处理器时间资源的基本单元也是系统调用的基本单位,简单理解就是一个或多个线程组成了一个进程,进程就像爸爸,线程就像儿子,有时候爸爸一个人干不了活就生了几个儿子干活,会 ...
- java自定义注解实现前后台参数校验
2016.07.26 qq:992591601,欢迎交流 首先介绍些基本概念: Annotations(also known as metadata)provide a formalized way ...
- 多元线性回归----Java简单实现
http://www.cnblogs.com/wzm-xu/p/4062266.html 多元线性回归----Java简单实现 学习Andrew N.g的机器学习课程之后的简单实现. 课程地址:h ...
- Java简单工厂模式
Java简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简 ...
- Java基础 -- 泛型之泛型参数
泛型机制常用的参数有3个: “?”代表任意类型.如果只指定了<?>,而没有extends,则默认是允许任意类. extends关键字声明了类型的上界,表示参数化的类型可能是所指定的类型,或 ...
- 2.5万字长文简单总结SpringMVC请求参数接收
这是公众号<Throwable文摘>发布的第22篇原创文章,暂时收录于专辑<架构与实战>.暂定下一篇发布的长文是<图文分析JUC同步器框架>,下一篇发布的短文是&l ...
- java简单词法分析器(源码下载)
java简单词法分析器 : http://files.cnblogs.com/files/hujunzheng/%E7%AE%80%E5%8D%95%E8%AF%8D%E6%B3%95%E5%88%8 ...
- !!转!!java 简单工厂模式
举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就是 ...
- Java 简单登录MVC
构建一个简单的基于MVC模式的JavaWeb 零晨三点半了,刚刚几个兄弟一起出去吼歌,才回来,这应该是我大学第二次去K歌,第一次是大一吧,之后每次兄弟喊我,我都不想去,因为我还是很害怕去KTV,或许是 ...
随机推荐
- JavaScript对象的创建之外部属性定义方式(基于已有对象扩充其属性和方法)
var person = new Object(); person.name = "luogk"; person.age = 33; person.say = function() ...
- vc调用dll 示例
其实,调用dll文件的方法很多,不一定要使用LoadLibrary函数.如果使用的话,你就要预先声明dll中的函数,很麻烦. 下面是我使用dll时的一点技巧,就是引入lib文件,可以参考: 一.Win ...
- Testing and Checking Refined
还是James大叔的文章:http://www.satisfice.com/blog/archives/856 本文提出了Testing和checking的定义和他们之间的区别. ========== ...
- Oozie 中各种类型的作业执行结果记录
一,提交的作业被SUSPEND,然后再被KILL,记录如下: TYPE1: appType WORKFLOW_JOB id 0000002-160516095026479-oozie-oozi-W e ...
- 在使用 百度编辑器 Ueditor 时,不能进入 Controller 相应的 Action 的处理方法
如果在前端的页面中使用了 Ueditor 编辑器,那么在提交表单数据时,将不会执行 期望的 Controller 中的 Action ,造成这样的原因是: 在 MVC 4 的框架中,当前端页面需要提交 ...
- django+celery+redis环境搭建
初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...
- 学习总结 Java 基本数据类型 和标识符以及常用的关键字
思维导图: public static void main(String[] args) { // java程序的入口点 c#是Main System.out.println("测试输出&q ...
- Activity使用Dialog样式导致点击空白处自动关闭的问题
将Activity设置成窗口的样式实现Dialog或者Popupwindow效果在开发中是很常用的一种方式,在AndroidMenifest.xml中将需要设置的Activity增加android:t ...
- javascript设计模式-桥接模式
在系统中,某些类由于自身逻辑,具有两个或两个以上维度的变化,如何使得该类型可以沿多个方向变化,但又不引入额外的复杂度,这就是桥接模式要解决的问题. 定义:桥接模式(Bridge),将抽象部分与它的实现 ...
- Android添加权限大讲解
对于新手来说,最烦恼的不是如何从网上下载到安卓项目,而是下载到的安卓项目不知道如何添加权限和要添加哪些权限. 现在就针对安卓的权限来讲解这些权限应该具体用在什么地方 首先在项目下找到 AndroidM ...