`

利用apache Collections和google guava对list和map进行过滤和排序

 
阅读更多
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中的对象按不同属性排序,请看此
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
分享到:
评论

相关推荐

    Google-Guava-Collections-使用介绍

    ### Google Guava Collections 使用介绍 #### 一、概述 Google Guava Collections 是 Java Collections Framework 的一个强大且实用的非官方扩展 API。它由 Google 工程师 Kevin Bourrillion 和 Jared Levy 在著名...

    mahout的guava-r09-jar

    1. **数据容器与集合**:Guava提供了强类型的List、Set和Map实现,以及Multiset、Multimap和Table等高级容器,使得数据组织和操作更加灵活和高效。 2. **缓存机制**:Guava的LoadingCache接口可以方便地创建自定义...

    java 数据集工具

    例如,`Collections.sort(list)`可以对List进行排序,`Collections.reverse(list)`则可以反向排列列表。 4. **Stream API**:自Java 8引入的Stream API为处理集合提供了一种声明式、函数式编程的方式,支持链式操作...

    google-collect-1.0.jar.zip

    Google Collections Library在2007年首次发布,后来发展成为Apache Commons Lang的子项目,最终演变为现在的Guava库,它是Google Java开发工具包的一部分。 在压缩包子文件的文件名称列表中,我们看到"google-...

    28个java常用的工具类

    7. **Comparator**:用于自定义排序规则,可以在List、Set和Map等数据结构中实现定制排序。 8. **Date 和 Calendar**:Date表示特定瞬间,Calendar是抽象基类,提供了日期和时间操作。Java 8引入的`java.time`包...

    JAVA对象以及数据的工具类

    在处理Map时,MapUtils类(如在Apache Commons Collections中)提供了创建预定义大小的Map,或者检查Map是否为空等便捷功能。 对于日期和时间的操作,Java 8引入了新的日期/时间API,包括LocalDate、LocalTime、...

    常用工具类

    比如,`Collections.sort()`可对List进行排序,`Collections.reverse()`则可以反转List元素的顺序,而`Collections.synchronizedXXX()`系列方法则能帮助我们创建线程安全的集合。 `Date`和`Calendar`类是处理日期和...

    java语言集合框架

    最后,工具类如`Guava`和`Apache Commons Collections`提供了更多高级功能和优化的集合实现,如多路集、不可变集合、并行流等,它们可以进一步增强Java集合框架的功能。 总之,Java语言集合框架是Java编程的核心,...

    GSCollections受Smalltalk启发的集合框架

    7. **Guava和Apache Commons兼容**:GS Collections与流行的Java库Guava和Apache Commons Collection有良好的互操作性,可以方便地将它们结合使用。 8. **版本号1099fce**:这个版本号可能表示GS Collections的某个...

    java入门,面试圣经

    Java集合框架还包括了Java Collections Framework(JCF)、Apache Commons Collections、Google Guava等重要的集合工具库。 在数据结构方面,Java提供了多种用于存储和检索数据的方式,如堆(Heap)、栈(Stack)、...

    java工具类

    例如,`Collections`类提供了许多静态方法,用于对集合进行排序、复制、填充等操作,这些方法都支持泛型,可以处理特定类型的集合。 3. **日期和时间处理**:`java.util.Date`和`java.util.Calendar`是处理日期和...

    java中常用的工具类

    在Java编程中,工具类(Utility Class)是包含各种静态方法的类,...以上只是Java中常用工具类的一部分,实际开发中还有很多其他类和库,例如Apache Commons、Google Guava等第三方工具集,它们提供了更多的实用功能。

    utils工具集合.zip

    工具类可能包含对List、Set、Map等数据结构的操作,如转换、过滤、查找等。Guava的Collections和Multisets等类提供了许多实用的方法。 4. **IO流工具**:在处理文件和网络数据时,IO流操作不可或缺。例如,Apache ...

    java常用工具类

    4. **Collections** 类:这是一个非常重要的工具类,提供了对集合进行操作的各种静态方法,如排序、翻转、填充等。 5. **Arrays** 类:处理数组的工具类,包含排序、复制、填充等方法。 6. **Date** 和 **Calendar...

    java常用的工具类

    3. **Java Collections Framework**: Java内置的集合框架包括List、Set、Map等接口,以及它们的实现类如ArrayList、HashSet、HashMap等。`Collections`工具类提供了许多操作集合的方法,如排序、填充、查找等。`...

    一个牛人给java初学者的建议

    对于初学者,理解Java的标准库(如Collections、IO、Util等包)和常用的开源库(如Apache Commons、Guava等)也很重要,这些库提供了丰富的功能,可以极大地提高开发效率。 最后,持续学习和实践是成为Java高手的...

    java 开发工具类

    3. **Java Collections Framework**: Java 内置的集合框架提供了多种数据结构,如List、Set、Map,以及各种实用工具类,如`Collections`(提供集合操作,如排序、复制、反转)、`Arrays`(处理数组,如排序、填充、...

    整理了一个关于网上java问与答的一个手册

    1. List、Set、Map接口:分别代表有序可重复、无序不可重复和键值对的数据结构。 2. ArrayList与LinkedList:两种List实现,前者随机访问快速,后者插入删除高效。 3. HashMap与TreeMap:HashMap提供快速查找,...

Global site tag (gtag.js) - Google Analytics