Lambdaj


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());

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页