用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,或许是 ...
随机推荐
- Missing artifact com.sun:tools:jar:1.5.0:system 补充
转自:http://blog.csdn.net/sweblish/article/details/6662586 解决方案一: 原来,是${java.home}在作怪,eclipse 没有使用 JAV ...
- NOIP2013Day1解题报告
本来今天晚上拿13年NOIP的题目来做一下,测测能够得多少分,结果一晚上把Day1写完竟然AK了,吼吼吼 D1T1,题目:http://codevs.cn/problem/3285/ 很水的一道快速幂 ...
- CLOB和BLOB的区别
BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的.其实两个是可以互换的的,或者可以直接用LOB字段代替这两个.但是为了更好的管理ORACLE数据库,通常像图 ...
- Orchard官方文档翻译(十) 管理Widgets
原文地址:http://docs.orchardproject.net/Documentation/Managing-widgets 想要查看文档目录请用力点击这里 最近想要学习了解orchard,但 ...
- notepad++ tab键用空格缩进
从工作那天开始到现在,写python代码一直用notepad++来写,尝试几次都改不回eclipse.o(╯□╰)o python脚本中,如果用制表符缩进,经常会报错,必须改用空格缩进代替. 之前设置 ...
- EXCEL数据透视图操作方式
1.先圈住要做视图的区域,如图1 2.插入——>数据透视表,点下拉小标识,选择数据透视图(注,可能此功能没有,右键工具栏空白->自定义快速访问工具-->所有-->按下S 找到视 ...
- 洛谷P1518 两只塔姆沃斯牛 The Tamworth Two
P1518 两只塔姆沃斯牛 The Tamworth Two 109通过 184提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交 讨论 题解 最新讨论 求数据 题目背景 题目描 ...
- [SSH 3]以网上商城项目浅谈spring配置
导读:在做ITOO项目的时候,就用到了容器+反射,从而运用了依赖注入和依赖查找.如果看过WCF端的配置文件,那么对于这个spring的配置就很容易理解.本篇博客,是对于自己做的一个小项目中所运用到的s ...
- EFDC_EE如何设置自适应时间步长
下图是EFDC_EE的运行时间参数的设置界面,在时间步长的设置中,如果“Safety Factor”参数,设置为非0,即可实现自适应时间步长的设置,但要注意如下几点: 1.“Safety Factor ...
- C语言文法 改
<程序> -> <外部声明> | <程序> <外部声明> <外部声明> -> <函数定义> | &l ...