用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,或许是 ...
随机推荐
- Appnium安装——Mac篇
mac下搭建appium环境有两种方法: 1.直接下载appium.dmg 运行即可 2.使用node从命令行运行appium Mac下的appnium环境搭建 一.首先安装homebrew 1.首先 ...
- python学习笔记(sqlalchemy安装失败)
博主今天折腾了一天sqlalchemy安装问题 下面是失败的截图 直接重新安装python2.7仍未解决此问题 最终在一国外论坛中找到解决的方法: 安装VC++对python的支持文件 VCForPy ...
- JavaScript数据结构,队列和栈
在JavaScript中为数组封装了大量的方法,比如:concat,pop,push,unshift,shift,forEach等,下面我将使用JavaScript提供的这些方法,实现队列和栈的操作. ...
- MSP430F149学习之路——按键
代码一: /********************************** 程序功能:用按键控制LED灯熄灭 ***********************************/ #incl ...
- Web 项目 中读取专用配置文件
在 web 开发中,有时我们要为 业务逻辑处理 配置专用的 配置文件,也就是 xml 文件,这样可以极大的方便维护工作,但是读取 专用的配置文件还需要自己写一个方法,在这里,我封装了一个公用 的方法: ...
- bash中正则表达式
工作中需要用bash的地方不是很多,之前只是大致了解过,每每用到都得去网上查询,遂决定以后将所用到的正则用法在这里统一收藏,便于学习. 1.echo 'inet addr:10.1.1.1 Bcas ...
- 洛谷P1530 分数化小数 Fractions to Decimals
P1530 分数化小数 Fractions to Decimals 103通过 348提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目 ...
- Android添加权限大讲解
对于新手来说,最烦恼的不是如何从网上下载到安卓项目,而是下载到的安卓项目不知道如何添加权限和要添加哪些权限. 现在就针对安卓的权限来讲解这些权限应该具体用在什么地方 首先在项目下找到 AndroidM ...
- css框模型
元素的背景是内容.内边距和边框区的背景. css中:width 和 height 指的是内容区域的宽度和高度.增加内边距.边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸. bootstr ...
- 添加 SecondaryNameNode
网络上的很多人写的过程都是错的,关键配置反而不写. SecondaryNameNode的启动有两种方式 一:在整个hdfs系统启动时,在namenode上执行start-dfs.sh则namenode ...