- 浏览: 3420881 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (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.jiancool.com/article/50723356810/
在工作中,我们常常需要对List或者Map等集合结果过滤或者排序,这里我通过使用apache commons和google guava中的方法,简单实现了一下,方便以后使用。
例子中使用的是apache commons3.1和google-guava14,最新版本是18
apache项目下载地址:http://projects.apache.org/indexes/quick.html
apache Collectoins下载地址:http://commons.apache.org/proper/commons-collections/
apache代码如下:
对List中的对象按不同属性排序,请看此
打印结果:
Twitter,3
Youtube,4
Telerik,5
Google,6
Google,6
-------------------你懂的------------------------
Apple,1
Facebook,2
Twitter,3
Youtube,4
Telerik,5
Google,6
google guava代码:
打印结果:
Map-UserGuava=Telerik,3
Map-UserGuava=Twitter,5
Map-UserGuava=Google,4
-------------------你懂的------------------------
List-UserGuava=Telerik,3
List-UserGuava=Google,4
List-UserGuava=Twitter,5
-------------------你懂的------------------------
List-IN-UserGuava=Telerik,3
List-IN-UserGuava=Google,4
List-IN-UserGuava=Twitter,5
-------------------你懂的------------------------
List-Sort-UserGuava=JetBrains,1
List-Sort-UserGuava=Youtube,1
List-Sort-UserGuava=Apple,2
List-Sort-UserGuava=Facebook,2
List-Sort-UserGuava=Telerik,3
List-Sort-UserGuava=Google,4
List-Sort-UserGuava=Twitter,5
在工作中,我们常常需要对List或者Map等集合结果过滤或者排序,这里我通过使用apache commons和google guava中的方法,简单实现了一下,方便以后使用。
例子中使用的是apache commons3.1和google-guava14,最新版本是18
apache项目下载地址:http://projects.apache.org/indexes/quick.html
apache Collectoins下载地址:http://commons.apache.org/proper/commons-collections/
apache代码如下:
对List中的对象按不同属性排序,请看此
package com.umapp.test; public class UserGuava { private String name; private int age; @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; UserGuava other = (UserGuava) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } public UserGuava(){ } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package com.umapp.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.collections.Predicate; import org.apache.commons.collections.iterators.FilterIterator; import org.apache.commons.collections.iterators.UniqueFilterIterator; public class TestApache { /** * @param args */ public static void main(String[] args) { List<UserGuava> list = new ArrayList<UserGuava>(); UserGuava user = new UserGuava(); user.setAge(1); user.setName("Apple"); list.add(user); user = new UserGuava(); user.setAge(2); user.setName("Facebook"); list.add(user); user = new UserGuava(); user.setAge(3); user.setName("Twitter"); list.add(user); user = new UserGuava(); user.setAge(4); user.setName("Youtube"); list.add(user); user = new UserGuava(); user.setAge(5); user.setName("Telerik"); list.add(user); user = new UserGuava(); user.setAge(6); user.setName("Google"); list.add(user); user = new UserGuava(); user.setAge(6); user.setName("Google"); list.add(user); Predicate predicate=new Predicate(){ @Override public boolean evaluate(Object arg0) { UserGuava u = (UserGuava)arg0; return u.getAge()>2; } }; Iterator<?> iterator=new FilterIterator(list.iterator(),predicate); while(iterator.hasNext()){ UserGuava u = (UserGuava)iterator.next(); System.out.println(u.getName()+","+u.getAge()); } System.out.println("-------------------你懂的------------------------"); Iterator iterator1=new UniqueFilterIterator(list.iterator()); while(iterator1.hasNext()){ UserGuava u = (UserGuava)iterator1.next(); System.out.println(u.getName()+","+u.getAge()); } } }
打印结果:
Twitter,3
Youtube,4
Telerik,5
Google,6
Google,6
-------------------你懂的------------------------
Apple,1
Facebook,2
Twitter,3
Youtube,4
Telerik,5
Google,6
google guava代码:
package com.umapp.test; import java.util.Comparator; public class NameComparator implements Comparator<UserGuava> { @Override public int compare(UserGuava user, UserGuava user1) { return user.getName().compareTo(user1.getName()); } }
package com.umapp.test; import java.util.Comparator; public class AgeComparator implements Comparator<UserGuava> { @Override public int compare(UserGuava user, UserGuava user1) { return user.getAge() > user1.getAge() ? 1 : (user.getAge() == user1.getAge() ? 0 : -1); } }
package com.umapp.test; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Ordering; public class TestGuava { public static void main(String[] args) { Map<String, UserGuava> map = Maps.newHashMap(); List<UserGuava> list = Lists.newArrayList(); UserGuava user = new UserGuava(); user.setAge(1); user.setName("JetBrains"); map.put("1", user); list.add(user); user = new UserGuava(); user.setAge(2); user.setName("Apple"); list.add(user); map.put("2", user); user = new UserGuava(); user.setAge(3); user.setName("Telerik"); list.add(user); map.put("3", user); user = new UserGuava(); user.setAge(4); user.setName("Google"); list.add(user); map.put("4", user); user = new UserGuava(); user.setAge(5); user.setName("Twitter"); list.add(user); map.put("5", user); user = new UserGuava(); user.setAge(2); user.setName("Facebook"); list.add(user); map.put("2", user); user = new UserGuava(); user.setAge(1); user.setName("Youtube"); map.put("1", user); list.add(user); Predicate<UserGuava> preFilter = new Predicate<UserGuava>(){ @Override public boolean apply(UserGuava user) { return user.getAge()>2; } }; for (Entry<String, UserGuava> e : map.entrySet()) { if (preFilter.apply(e.getValue())) { UserGuava u= (UserGuava)e.getValue(); System.out.println("Map-UserGuava="+u.getName()+","+u.getAge()); } } System.out.println("-------------------你懂的------------------------"); for (UserGuava u:list) { if (preFilter.apply(u)) { System.out.println("List-UserGuava="+u.getName()+","+u.getAge()); } } System.out.println("-------------------你懂的------------------------"); Predicate<UserGuava> p1 = new Predicate<UserGuava> () { @Override public boolean apply(UserGuava user) { if (user == null) { return false; } if (Objects.equals(user.getAge(), 1)) { return false; } return true; } }; Predicate<UserGuava> p2 = new Predicate<UserGuava> () { @Override public boolean apply(UserGuava user) { if (user == null) { return false; } if (Objects.equals(user.getAge(), 2)) { return false; } return true; } }; Predicate<UserGuava> unionPredicate = Predicates.and(p1, p2); //两种处理方式 // List<UserGuava> newUserList = Lists.newArrayList(Iterators.filter(list.iterator(), unionPredicate)); Collection<UserGuava> newUserList =(Collection<UserGuava>) Collections2.filter(list, unionPredicate); for (UserGuava u:newUserList) { System.out.println("List-IN-UserGuava="+u.getName()+","+u.getAge()); } System.out.println("-------------------你懂的------------------------"); //先按年龄,再按名称排序 Comparator<UserGuava> userComparator = Ordering .from(new AgeComparator()).compound(new NameComparator()); Collections.sort(list, userComparator); for (UserGuava u:list) { System.out.println("List-Sort-UserGuava="+u.getName()+","+u.getAge()); } } }
打印结果:
Map-UserGuava=Telerik,3
Map-UserGuava=Twitter,5
Map-UserGuava=Google,4
-------------------你懂的------------------------
List-UserGuava=Telerik,3
List-UserGuava=Google,4
List-UserGuava=Twitter,5
-------------------你懂的------------------------
List-IN-UserGuava=Telerik,3
List-IN-UserGuava=Google,4
List-IN-UserGuava=Twitter,5
-------------------你懂的------------------------
List-Sort-UserGuava=JetBrains,1
List-Sort-UserGuava=Youtube,1
List-Sort-UserGuava=Apple,2
List-Sort-UserGuava=Facebook,2
List-Sort-UserGuava=Telerik,3
List-Sort-UserGuava=Google,4
List-Sort-UserGuava=Twitter,5
发表评论
-
分布式存储系统GlusterFS安装配置
2016-06-27 14:51 1030http://navyaijm.blog.51cto.com/ ... -
Java Comparable和Comparator
2016-06-26 08:52 694http://my.oschina.net/android52 ... -
分布式查询 presto 入门安装使用
2016-06-24 15:44 2502http://my.oschina.net/chengxiao ... -
Java集合框架之fastutil & koloboke
2016-06-23 14:04 2470Java集合框架之fastutil http://rensan ... -
跟我学习dubbo
2016-06-17 15:20 1066跟我学习dubbo-目录 http://bluereader. ... -
JavaMelody监控web服务器
2016-06-17 14:20 1178JavaMelody监控web服务器 http://my.os ... -
freemarker使用记录
2016-06-08 16:24 1309freeMarker语法 http://uule.iteye. ... -
freemarker判断是否为空
2016-06-08 16:03 2http://www.oschina.net/code/sni ... -
ehcache 分布式支持
2016-06-05 22:26 1098原文 http://my.oschina.net/glenxu ... -
Intellij IDEA插件开发入门
2016-05-26 11:42 2882原文: http://blog.csdn.net/dc_726 ... -
阿里巴巴Druid数据源的配置与使用
2016-05-24 17:42 1542http://my.oschina.net/wjme/blog ... -
分布式任务调度组件 Uncode-Schedule
2016-05-13 14:47 2286http://www.oschina.net/p/uncode ... -
mysql中间件研究(Atlas,cobar,TDDL), 分库分表插件
2016-05-09 14:15 3441http://www.guokr.com/blog/47576 ... -
Java集合: Queue和Deque
2016-05-09 09:49 1861Queue http://my.oschina.net/kev ... -
使用gzip优化web应用(filter实现)
2016-05-07 01:45 1029使用gzip优化web应用(filter实现) http:// ... -
Fedora安装Redis
2016-05-04 08:56 1412管理工具: centos6.3下安装phpredisadmin ... -
redis-install.sh
2016-05-04 08:56 4#!/bin/bash # From here: http: ... -
redis 集群中Session解决方案之Spring Session
2016-05-04 08:54 1314集群中Session解决方案之Spring Session h ... -
使用Spring-data进行Redis操作
2016-05-04 08:54 4791使用Spring-data进行Redis操作 http://z ... -
Shiro集群实现
2016-05-04 08:53 2311apache shiro集群实现(一) session共享 h ...
相关推荐
### Google Guava Collections 使用介绍 #### 一、概述 Google Guava Collections 是 Java Collections Framework 的一个强大且实用的非官方扩展 API。它由 Google 工程师 Kevin Bourrillion 和 Jared Levy 在著名...
1. **数据容器与集合**:Guava提供了强类型的List、Set和Map实现,以及Multiset、Multimap和Table等高级容器,使得数据组织和操作更加灵活和高效。 2. **缓存机制**:Guava的LoadingCache接口可以方便地创建自定义...
例如,`Collections.sort(list)`可以对List进行排序,`Collections.reverse(list)`则可以反向排列列表。 4. **Stream API**:自Java 8引入的Stream API为处理集合提供了一种声明式、函数式编程的方式,支持链式操作...
Google Collections Library在2007年首次发布,后来发展成为Apache Commons Lang的子项目,最终演变为现在的Guava库,它是Google Java开发工具包的一部分。 在压缩包子文件的文件名称列表中,我们看到"google-...
7. **Comparator**:用于自定义排序规则,可以在List、Set和Map等数据结构中实现定制排序。 8. **Date 和 Calendar**:Date表示特定瞬间,Calendar是抽象基类,提供了日期和时间操作。Java 8引入的`java.time`包...
在处理Map时,MapUtils类(如在Apache Commons Collections中)提供了创建预定义大小的Map,或者检查Map是否为空等便捷功能。 对于日期和时间的操作,Java 8引入了新的日期/时间API,包括LocalDate、LocalTime、...
比如,`Collections.sort()`可对List进行排序,`Collections.reverse()`则可以反转List元素的顺序,而`Collections.synchronizedXXX()`系列方法则能帮助我们创建线程安全的集合。 `Date`和`Calendar`类是处理日期和...
最后,工具类如`Guava`和`Apache Commons Collections`提供了更多高级功能和优化的集合实现,如多路集、不可变集合、并行流等,它们可以进一步增强Java集合框架的功能。 总之,Java语言集合框架是Java编程的核心,...
7. **Guava和Apache Commons兼容**:GS Collections与流行的Java库Guava和Apache Commons Collection有良好的互操作性,可以方便地将它们结合使用。 8. **版本号1099fce**:这个版本号可能表示GS Collections的某个...
Java集合框架还包括了Java Collections Framework(JCF)、Apache Commons Collections、Google Guava等重要的集合工具库。 在数据结构方面,Java提供了多种用于存储和检索数据的方式,如堆(Heap)、栈(Stack)、...
例如,`Collections`类提供了许多静态方法,用于对集合进行排序、复制、填充等操作,这些方法都支持泛型,可以处理特定类型的集合。 3. **日期和时间处理**:`java.util.Date`和`java.util.Calendar`是处理日期和...
在Java编程中,工具类(Utility Class)是包含各种静态方法的类,...以上只是Java中常用工具类的一部分,实际开发中还有很多其他类和库,例如Apache Commons、Google Guava等第三方工具集,它们提供了更多的实用功能。
工具类可能包含对List、Set、Map等数据结构的操作,如转换、过滤、查找等。Guava的Collections和Multisets等类提供了许多实用的方法。 4. **IO流工具**:在处理文件和网络数据时,IO流操作不可或缺。例如,Apache ...
4. **Collections** 类:这是一个非常重要的工具类,提供了对集合进行操作的各种静态方法,如排序、翻转、填充等。 5. **Arrays** 类:处理数组的工具类,包含排序、复制、填充等方法。 6. **Date** 和 **Calendar...
3. **Java Collections Framework**: Java内置的集合框架包括List、Set、Map等接口,以及它们的实现类如ArrayList、HashSet、HashMap等。`Collections`工具类提供了许多操作集合的方法,如排序、填充、查找等。`...
对于初学者,理解Java的标准库(如Collections、IO、Util等包)和常用的开源库(如Apache Commons、Guava等)也很重要,这些库提供了丰富的功能,可以极大地提高开发效率。 最后,持续学习和实践是成为Java高手的...
3. **Java Collections Framework**: Java 内置的集合框架提供了多种数据结构,如List、Set、Map,以及各种实用工具类,如`Collections`(提供集合操作,如排序、复制、反转)、`Arrays`(处理数组,如排序、填充、...
1. List、Set、Map接口:分别代表有序可重复、无序不可重复和键值对的数据结构。 2. ArrayList与LinkedList:两种List实现,前者随机访问快速,后者插入删除高效。 3. HashMap与TreeMap:HashMap提供快速查找,...