在java中使用委托实现map/filter
在java中,假设你有一个user 对象的list,此user对象封装了用户的id, first name, last name and age. 然后你想调用一个web service(eg. UserService.deleteUsersByIds(List<Integer> userIds) 去删除数据库中指定的这些user。 听起来似乎不太困难,不是么? 你所需要只是将 List<User> 转化成List<Integer>。 所有你先写下下面的代码:
List<Integer> ids = new ArrayList<Integer>(users.size());
for (User user : users) {
ids.append(user.getId());
}
然后你继续使用您的ID list,这一切都非常好。
但是,两分钟后,你会发现自己不得不为获取一个String型的用户名列表而重新定义一个API方法。
List<String> names = new ArrayList<String>(users.size());
for (User user : users) {
names.append(new StringBuilder(user.getFirstNam()).append(" ").append("user.getLastName()));
}
或许你还需要一个21岁以下的user list。
List<User> newUsers= new ArrayList<User>(users.size());
for (User user : users) {
if(user.getAge()<21){
newUsers.add(user);
}
}
或许你还需要的更多。。。。
很快你发现这件事情变得很乏味。
根据目前情形,你会发现这里有2个非常重要的功能 map 和filter
1.map(coll, f):遍历集合coll, 在集合中调用f的方法,将f的方法处理结果装入一个集合返回(也就是调用f中的方法组装另外一个需要的集合,然后返回)。
2.filter(coll, f):遍历集合coll, 在集合中调用f的方法,当f(element) returns true 将结果装入一个集合返回。
为了达到上面得到Id 的List我们可能需要这样中
<fromType, ToType> List<ToType> map(ArrayList<fromType> list) {
List<ToType> retval = new ArrayList<ToType>(list.size());
for (fromType item : list) {
[...]
}
return retval;
}
这样看起来似乎跟下面的code没有什么区别。
1 List<Integer> ids = new ArrayList<Integer>(users.size());
2
for (User user : users) {
3
ids.append(user.getId());
4
}
由于java不提供语言级别的委托,因此我们需要为这个委派提供一个接口
1
interface
相关文档:
一、多种方式读文件内容。
1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java ......
<%
//header.jsp
out.println("Protocol: " + request.getProtocol() + "<br>");
out.println("Scheme: " + request.getScheme() + "<br>");
out.println("Server Name: " + request.getServerName() + "<br>" );
out.println(&quo ......
service = new
Service();
thread=new
Thread(service);
try
{
  ......