lambdJ提供了一个DSL的语法去对集合进行相关操作。DSL 就是 Domain specific Language,精髓在「Domain」一词,「领域业务专门语言」,就是特定一个业务领域所专有的语言形式。比如我们所熟悉的SQL语言,就是一门DSL语言,它是专门针对数据库操作的语言。那lambdJ就是一个专门针对「集合」操作的DSL语言。
lambdaj是一个纯净的集合操作工具,它不会提供任何的集合扩展,只会提供对集合的操作。
我们先定义一个类,它将会被我们要操作的集合对象包含。
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());
sort(排序,倒叙) 匿名内部类
List<Person> list = Lambda.sort(persons, Lambda.on(Person.class).getAge(), new Comparator<Integer>() {
public int compare(Integer int1, Integer int2) {// 实现接口中的方法
if(int1 > int2) {
return -1;
}else return -1;
} } );
extract(抽取字段属性组成集合)
List<Integer> ageList = extract(persons, on(Person.class).getAge());
index(以某字字段属性为关键值分组)
Map<String,Person> mapByName = index(persons, on(Person.class).getName());