接着介绍另外一个好用的java库。

记得之前做过一个web services,业务逻辑是很简单,可是代码写得多又长,因为基本上都是在对ArrayList结果进行各种筛选,排序,聚合等操作。大家都有这样的感觉,这样的代码写起来洋洋洒洒不觉得累,反正都是集合的循环操作不用动脑子,边看着微博边写代码都行,可是看的人就苦逼了,大循环嵌套小循环,半天找不到一句有用的「业务」描述性提示,你还不得不细心着看半天才知道原来是对集合做一些简单操作。

lambdaJ 就是这样的针对这样的一个编程上下文场景而出来的,懒惰的聪明人最可能会写出一个个好用的工具(说到「工具」,今天买了本「打造Facebook」,里面就提到了facebook公司的工具文化)来。

The best way to understand what lambdaj does and how it works is to start asking why we felt the need to develop it:

  • We were on a project with a complex data model
  • The biggest part of our business logic did almost always the same: iterating over collections of our business objects in order to do the same set of tasks
  • Loops (especially when nested or mixed with conditions) are harder to be read than to be written
  • We wanted to write our business logic in a less technical and closer to business fashion

--在javaone 2010会议上,lambdJ演讲中PPT描述为什么lambdJ会开发出来

「我希望我们写的代码能让业务员都能看懂」,我是这样理解上面引用表达的内容的。

lambdJ提供了一个DSL的语法去对集合进行相关操作。DSL 就是 Domain specific Language,精髓在「Domain」一词,「领域业务专门语言」,就是特定一个业务领域所专有的语言形式。比如我们所熟悉的SQL语言,就是一门DSL语言,它是专门针对数据库操作的语言。那lambdJ就是一个专门针对「集合」操作的DSL语言。

下面我们就要看下如果使用它:

我们先定义一个类,它将会被我们要操作的集合对象包含。

public class Person implements Serializable{private static final long serialVersionUID = -5626560607865508210L;private int id;private String name;private int age;
}//初始化一个集体对象
List<Person> persons = new ArrayList<Person>();Person p = new Person();
p.setId(1);
p.setName("张三");
p.setAge(28);
persons.add(p);
p = new Person();
p.setId(2);
p.setName("李四");
p.setAge(35);
persons.add(p);

joinFrom(连接字段)

String names = joinFrom(persons).getName();//output:张三, 李四

还可以自定义拼接符

String names = joinFrom(persons,"--").getName();//output: 张三--李四

select(条件选择)

//筛选出年龄大于33岁的人
List<Person> ageGreaterThan33 = select(persons,having(on(Person.class).getAge(),Matchers.greaterThan(33)));

selectMax,selectMin(最大/最小 对象)

Person personWithMaxAge = selectMax(persons, on(Person.class).getAge());//得到年龄最大的人

max,min(最大/最小 对象属性值)

int maxAge = max(persons, on(Person.class).getAge());//获得集合中年龄最大的那个值

maxFrom,minFrom(和max,min功能一样)

int maxAge = maxFrom(persons).getAge();//获得集合中年龄最大的那个值,和上面的max一样功能,形式不同而也

sum,sunFrom(求和)

int ageSum = sumFrom(persons).getAge();
int ageSum = sum(persons, on(Person.class).getAge());

sort(排序)

List<Person> sortByAge = sort(persons, on(Person.class).getAge());

extract(抽取字段属性组成集合)

List<Integer> ageList = extract(persons, on(Person.class).getAge());

index(以某字字段属性为关键值分组)

Map<String,Person> mapByName = index(persons, on(Person.class).getName());

我这里写的都是很简单的例子,详细的功能介绍请查看官网上的ppt。总之只有你想不到,没有它做不到的集合操作功能。

还有,如果大家在工作中遇到很变态的集合操作而不知道怎么写时(就像很复杂的sql写法时),可以在这里留言我们一起讨论学习下。

转载于:https://www.cnblogs.com/jcli/archive/2013/01/09/2851906.html

好用java库(二) : lambdaj (集合操作)相关推荐

  1. 【java】java 8 的一些集合操作

    1.概述 转载并且补充:java8 stream的这些开发技巧,你值得好好收藏 2.stream的继承关系 stream的继承关系 Stream.IntStream.LongStream.Double ...

  2. java提供的对集合操作的常用方法,并集,交集,差集

    差集和并集 控制台打印: 交集 @Testpublic void testIntersection(){List<String> a = new ArrayList<String&g ...

  3. 读书笔记-《ON JAVA 中文版》-摘要12[第十二章 集合]

    文章目录 第十二章 集合 1. 泛型和类型安全的集合 2. 基本概念 3. 添加元素组 4. 集合的打印 5. 列表List 6. 迭代器Iterators 6.1 Iterators 6.2 Lis ...

  4. java 集合操作_Java 集合的操作 个人方法总结

    一些小建议: 在使用集合的时候如果不太清楚需求我们可以像对列一样如下: Queue expres=new ArrayDeque<>(); 重新指定类型,来进行更换 Queue expres ...

  5. Java基础(二):集合、IO流(Zip压缩输入/输出流等)、File文件类、反射、枚举

    Java基础(一):编译和解释.数据类型.变量作用域.String常用方法.数组.面向对象.异常 Java基础(二):集合.IO流(Zip压缩输入/输出流等).File文件类.反射.枚举 Java异常 ...

  6. java List最大_在java中获取List集合中最大的日期时间操作

    取list集合中最大的日期, 可以用date max = collections.max(datelist);, 传入一个日期集合, 就可以获取, 工作中有这个需求, 就查找到这个, 代码如下 } e ...

  7. java stream 8 常用的操作集合 求和 排序 过滤 拿出对象元素组成集合

    举个例子拿一个教师给学生开家长会Java实体 解释 stream 流操作集合建立在内存之上非常的快 以下列举 常用的操作方法 @Data public class OpenClass {private ...

  8. 2019年3月未来教育计算机二级题库,2019年3月计算机二Access考试操作模拟试题001...

    2019年3月计算机二Access考试操作模拟试题001 浏览次数:     时间:2019/03/28 一.基本操作题 在考生文件夹中有一个"Acc1.mdb"数据库. (1)在 ...

  9. java集合操作-----求两个集合的交集和并集

    java求两个集合的交集和并集 java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法.今天写个简单的例子测试一下:(例子中以java.util.LinkedList为例) 求连 ...

最新文章

  1. python中字典的练习
  2. python3学哪个版本好玩_python2和python3到底应该学哪个好?
  3. 1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解。
  4. JavaScript强化教程——数组的基本处理函数
  5. 使用Kotlin的Android Spinner
  6. 如何实现现实人脸照片的编码
  7. win10鼠标灵敏度怎么调_和平精英,灵敏度到底怎么调?小编视频来教你!
  8. 三星手机官方固件下载
  9. 【FPGA基础】四位二进制--格雷码转换器(vivado)
  10. 不能错过!9个让你随时保持精力充沛的习惯
  11. 如何在React.js文件中设置标签的背景图片
  12. Qt 笔锋 钢笔 压力值
  13. Carson带你学Android:RxJava、Retrofit联合使用汇总(含实例教程)
  14. 数据结构与算法学习---数据结构篇(线性表)(默然回首,夯实基础)
  15. 软件工程毕业设计课题(78)微信小程序毕业设计PHP校园食堂就餐预约小程序系统设计与实现
  16. Vega Prime 常见问题集
  17. unity游戏优化之ETC压缩和 Alpha通道处理
  18. mysql函数名称顿号,快速统计一个单元格内有多少个名字,你不会是一个一个数的吧...
  19. 第一次独立使用大型无人船记录日志—第2天
  20. c罗python可视化分析_梅西、内马尔谁是全能的五边形战士?教你用BI做出可视化能力图...

热门文章

  1. python官网无法访问_python写的网站,云服务器经常无法访问
  2. 初入SysML之模块定义图
  3. (76)ila使用?
  4. (49)VHDL实现8位奇偶校验电路(while loop语句)
  5. (20)FPGA数据接口同步化
  6. 360浏览器支持ajax吗,请问IE11,chrome,360浏览器7.1极速等这些浏览器不支持ajax技术吗?...
  7. java接听电话freeswitch_java通过http协议与Freeswitch对接实现动态添加用户
  8. 1018.eclipse工具使用记录
  9. 【Keil】使用Keil5时出现的错误(持续更新)
  10. 【好文链接】从原理上搞懂PID