避免使用循环来操作List
来源:互联网 发布:网络环境 搭建 pdf 编辑:程序博客网 时间:2024/04/30 02:18
Learning from functional languages, looping isn’t the best way to work on collections. Suppose we want to filter a list of persons to those who can drink beer. The loop versions looks like:
List<Person> beerDrinkers = new ArrayList<Person>();for (Person p: persons) { if (p.getAge() > 16) { beerDrinkers.add(p); }}
This can - even in Java - be rewritten to a more a functional programming style. For example using Google collections filter:
Predicate<HasAge> canDrinkBeer = new Predicate<HasAge>() { public boolean apply(HasAge hasAge) { return hasAge.getAge() > 16; }};List<Person> beerDrinkers = filter(persons, canDrinkBeer);
As remarked by Dave Jarvis, I should have dropped the getter, and he’s right ;-)
Predicate canDrinkBeer = new Predicate() { public boolean apply(HasAge hasAge) { return hasAge.isOlderThan( 16 ); }};
which would lead to better code down the road:
Predicate canDrinkBeer = new Predicate() { public boolean apply( HasAge hasAge, HasAge otherAge ) { return hasAge.isOlderThan( otherAge ); }}
The predicate version is slightly larger, but consists of two parts. Each one is easier to understand. While the loop version gets unreadable fast with new requirements, the functional version can easily be combined,
List beerDrinkers = filter(filter(persons, canDrinkBeer), isMale);
- 避免使用循环来操作List
- 使用 weak–strong dance 技术来避免循环引用
- jstl forEach 避免list双层循环
- Python用for循环来遍历list时,for循环体内有改动list长度的操作的情况
- 提倡使用foreach语句来进行循环操作
- 通过限制循环次数来避免死循环
- matlab中对数字图像进行像素操作时,尽量避免使用多层嵌套FOR循环
- 使用线程安全的 MSWeakTimer ,它不会对目标进行retain操作,避免循环引用
- 使用each()、list()和while循环配合使用来遍历数组
- 建议慎用boost::weak_ptr来避免智能指针循环引用
- 使用block时如何避免循环引用
- 使用 finally 关键字来避免资源漏洞
- 使用 finally 关键字来避免资源漏洞
- 使用 finally 关键字来避免资源漏洞
- 使用arguments.callee来避免递归出错
- 使用JavaScript来避免冗余数据
- 使用contexts来避免goroutines泄露
- 使用Optional来避免空指针
- 成功是怎么来的-从一个农民身上学到了很多
- 在用户登录日志中查询某个时间里面在线用户数量
- C#回调
- 家电以旧换新有补贴
- Device classes
- 避免使用循环来操作List
- minimal之udev
- sin(x)函数的源代码?
- 我的php电子书库
- 对于Portlet的认识
- 用java调用oracle存储过程总结
- 往Blob类型字段插入图片,使用与MySql或者Oracle
- Web应用中读取配置文件
- jfreechart