- 浏览: 3431468 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
http://www.cnblogs.com/jcli/archive/2013/01/09/2851906.html
lambdJ提供了一个DSL的语法去对集合进行相关操作。DSL 就是 Domain specific Language,精髓在「Domain」一词,「领域业务专门语言」,就是特定一个业务领域所专有的语言形式。比如我们所熟悉的SQL语言,就是一门DSL语言,它是专门针对数据库操作的语言。那lambdJ就是一个专门针对「集合」操作的DSL语言。
下面我们就要看下如果使用它:
我们先定义一个类,它将会被我们要操作的集合对象包含。
//初始化一个集体对象
joinFrom(连接字段)
还可以自定义拼接符
select(条件选择)
//筛选出年龄大于33岁的人
selectMax,selectMin(最大/最小 对象)
max,min(最大/最小 对象属性值)
maxFrom,minFrom(和max,min功能一样)
sum,sunFrom(求和)
sort(排序)
extract(抽取字段属性组成集合)
index(以某字字段属性为关键值分组)
我这里写的都是很简单的例子,详细的功能介绍请查看官网上的ppt。总之只有你想不到,没有它做不到的集合操作功能。
还有,如果大家在工作中遇到很变态的集合操作而不知道怎么写时(就像很复杂的sql写法时),可以在这里留言我们一起讨论学习下。
一个例子:
http://outofmemory.cn/code-snippet/2961/lambdaj-skeleton-usage-example
测试用Bean类:产品
生产产品的工厂
测试类
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写法时),可以在这里留言我们一起讨论学习下。
一个例子:
http://outofmemory.cn/code-snippet/2961/lambdaj-skeleton-usage-example
测试用Bean类:产品
package cn.outofmemory; /** * 测试用bean对象,产品 * @author 乔学士 * */ public class Product { private int id; private String name; private double price; private double weight; private String type; public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } public String getType() { return type; } public void setType(String type) { this.type = type; } public int getId() { return id; } public void setId(int id) { this.id = id; } @Override public String toString() { return "Product [id=" + id + ", name=" + name + ", price=" + price + ", type=" + type + ", weight=" + weight + "]"; } }
生产产品的工厂
package info.yiwen.data; import java.util.ArrayList; import java.util.List; import java.util.Random; /** * 生产产品的工厂 * @author 乔学士 * */ public class ProductFactory { public static List<Product> genRandomProduct(int amount){ if(amount < 0 ){ amount = 1; } Random random = new Random(); List<Product> ps = new ArrayList<Product>(amount); for(int i = 0; i < amount; i++){ Product p = new Product(); int randomNum = random.nextInt(100); p.setId(i+1); p.setId(i+1); p.setName("name" + randomNum); p.setPrice(Math.round(random.nextDouble() * 1000)); p.setWeight(Math.round(random.nextDouble() * 1000)); p.setType("type" + randomNum); ps.add(p); } return ps; } }
测试类
package info.yiwen.test; import java.util.Iterator; import java.util.List; import java.util.Map; import ch.lambdaj.function.closure.Closure; import info.yiwen.data.Product; import info.yiwen.data.ProductFactory; import static ch.lambdaj.Lambda.*; import static ch.lambdaj.collection.LambdaCollections.*; import static org.hamcrest.Matchers.*; /** * 测试类,方便起见,没有用jUnit * @author 乔学士 * */ public class Test { public static void main(String[] args) { List<Product> ps = ProductFactory.genRandomProduct(10); printl(1); //1.简单例子 //对每个product都设置price为100 //forEach(ps).setPrice(100); //对每个product都设置setPrice为100 //按重量从小到大进行排序 ps = sort(ps, on(Product.class).getWeight()); print(ps); printl(2); //2.joinFrom 连接某个属性,中间默认用逗号加空格(", "), 可以自定义分隔符 //连接每个product对象的name String names = joinFrom(ps).getName(); //连接每个product对象的name,间隔符为 ":" String names2 = joinFrom(ps,":").getName(); System.out.println(names); System.out.println(names2); printl(3); //3.select //从ps中选择出重量大于等于500的 List<Product> ps2 = select(ps, //注意下面greaterThanOrEqualTo方法中参数的类型一定要和getWeight严格相等 having(on(Product.class).getWeight(), greaterThanOrEqualTo(new Double(500))) ); System.out.println(ps2); printl(4); //4.selectMin找到最小的, also selectMax //找到重量最轻的产品 Product p = selectMin(ps, on(Product.class).getWeight()); System.out.println(p); printl(5); //5.max and maxFrom, also min and minFrom //找到最重的产品的重量(两种方法) //5.1 double weight1 = max(ps, on(Product.class).getWeight()); //5.2 double weight2 = maxFrom(ps).getWeight(); System.out.println(weight1 + "," + weight2); printl(6); //6.extract,抽取所有对象的某一列返回值 //得到每个产品的id //6.1 使用on List<Integer> ids = extract(ps, on(Product.class).getId()); System.out.println(ids); //6.2 使用属性名 List<?> ids2 = extractProperty(ps, "id"); System.out.println(ids2); printl(7); //7.index 返回一个map,value是每个对象,key是对象的某个属性 //返回一个key为id,value是对象的Map Map<Integer, ?> map = index(ps, on(Product.class).getId()); print(map); printl(8); //8.with 使用更为流畅的方法 //找到重量大于400的产品的id列表,并排序 //8.1原始方法 List<Double> prices1 = sort( extract( select(ps, having(on(Product.class).getWeight(), greaterThan(400.0))), on(Product.class).getPrice() ), on(Double.class).doubleValue() ); //8.2使用with的方法 List<Double> prices2 = with(ps) .retain(having(on(Product.class).getWeight(), greaterThan(400.0))) .extract(on(Product.class).getPrice()) .sort(on(Double.class).doubleValue()); System.out.println(prices1); System.out.println(prices2); printl(9); //9.闭包 ,of(T t) 返回T类型 Closure println = closure(); //创建一个closure,放到ThreadLocal中 of(System.out).println(var(String.class)); //of方法从ThreadLocal中得到这个Closure println.apply("hello"); println.each("hello","oschina"); } static void print(Iterable<?> ps){ Iterator<?> it = ps.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } static void print(Map<?, ?> map){ for(Map.Entry<?, ?> e :map.entrySet()){ System.out.println(e.getKey() + ":" + e.getValue()); } } static void printl(int itemNo){ System.out.println("--------------------" + itemNo + "---------------------"); } }
发表评论
-
Java Comparable和Comparator
2016-06-26 08:52 706http://my.oschina.net/android52 ... -
Java集合框架之fastutil & koloboke
2016-06-23 14:04 2480Java集合框架之fastutil http://rensan ... -
ehcache 分布式支持
2016-06-05 22:26 1104原文 http://my.oschina.net/glenxu ... -
Intellij IDEA插件开发入门
2016-05-26 11:42 2889原文: http://blog.csdn.net/dc_726 ... -
阿里巴巴Druid数据源的配置与使用
2016-05-24 17:42 1551http://my.oschina.net/wjme/blog ... -
mysql中间件研究(Atlas,cobar,TDDL), 分库分表插件
2016-05-09 14:15 3457http://www.guokr.com/blog/47576 ... -
Java集合: Queue和Deque
2016-05-09 09:49 1869Queue http://my.oschina.net/kev ... -
使用gzip优化web应用(filter实现)
2016-05-07 01:45 1034使用gzip优化web应用(filter实现) http:// ... -
Byteman 3.0.5 发布,Java 字节码注入工具
2016-04-23 10:29 1774Byteman 3.0.5 发布,Java 字 ... -
RandomStringUtils的说明和生成随机汉字
2016-04-20 15:21 1406更多参考: http://my.oschina.net/wil ... -
通过IP地址获取地理位置
2016-04-20 15:19 900http://my.oschina.net/githubhty ... -
Java编程中使用正则表达式过滤非数字字符串
2016-04-14 13:51 1726/** * * @param str ... -
非对称加密DH算法,DH代码实现
2016-04-13 11:33 1363RSA算法原理(一)http:// ... -
企业支付宝账号开发接口教程
2016-03-31 14:52 1247企业支付宝账号开发接口教程--JAVA-UTF-8(实际操作- ... -
java double类型数据操作工具类
2016-03-28 17:36 1253http://my.oschina.net/yxwblog/b ... -
double转换到BigDecimal
2016-03-28 17:11 1557BigDecimal b = new BigDecimal(d ... -
Java 生成好看的验证码
2016-03-23 10:52 3370http://www.oschina.net/code/sni ... -
Linux环境安装配置Swftools
2016-03-22 21:01 1112http://tetop.blog.51cto.com/188 ... -
java压缩与解压缩文件
2016-03-20 22:03 1475http://www.oschina.net/code/sni ... -
java图像压缩
2016-03-19 23:20 959http://my.oschina.net/686991/bl ...
相关推荐
例如,使用lambdaj可以轻松实现集合的过滤、映射、求和等操作,而无需编写大量的匿名内部类。这极大地提高了代码的可读性和简洁性。 在这个DEMO中,你可能会看到以下关键概念: 1. **Lambda表达式模拟**:lambdaj...
lambdaj-2.3.3
- **集合操作**:lambdaj 提供了一系列静态方法,如 `select`、`filter` 和 `sort`,用于对集合进行过滤、选择和排序等操作。 - **类型安全的函数式接口**:lambdaj 提供了类似于 `Predicate` 和 `Function` 的...
java运行依赖jar包
8. 扩展与社区:介绍JavaParser的扩展库,如LambdaJ或者Lombok的集成,以及JUG Milano社区的相关资源。 书签的存在使得用户可以快速定位到感兴趣的主题,提高学习和参考的效率。对于Java开发者来说,理解和掌握Java...
考试题库 hamcrest库Matcher库的简单示例 安装(Maven) 最新版本1,3:2012年7月 <groupId>org.hamcrest <artifactId>hamcrest-all ...Lambdaj的生产代码中的匹配器 Maven依赖 <groupId>com
- **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,简化了数据库操作,使开发者可以使用Java对象而非SQL语句进行数据访问。 - **Struts**:Struts是最早的Java Web MVC框架之一,虽然现在已被Spring MVC...