java 分组

    对studentList 中的学生名字进行分组
    // 进行分组
    Map> hisMap = Group.group(studentList, new GroupBy() {
        @Override
        public String groupby(Object obj) {
            Student d = (Student)obj ;
            return d.getName() ;    // 分组依据为业务名字
        }
    }) ;

附:

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;


import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * 集合分组测试
 * @author  ZhangLiKun
 * @mail    likun_zhang@yeah.net
 * @date    2013-4-23
 */
public class Group {

    /**
     * 分組依據接口,用于集合分組時,獲取分組依據
     * @author  ZhangLiKun
     * @title   GroupBy
     * @date    2013-4-23
     */
    public interface GroupBy {
        T groupby(Object obj) ;
    }   

    /**
     * 
     * @param colls
     * @param gb
     * @return
     */
    public static final extends Comparable ,D> Map> group(Collection colls ,GroupBy gb){
        if(colls == null || colls.isEmpty()) {
            System.out.println("分組集合不能為空!");
            return null ;
        }
        if(gb == null) {
            System.out.println("分組依據接口不能為Null!");
            return null ;
        }
        Iterator iter = colls.iterator() ;
        Map> map = new HashMap>() ;
        while(iter.hasNext()) {
            D d = iter.next() ;
            T t = gb.groupby(d) ;
            if(map.containsKey(t)) {
                map.get(t).add(d) ;
            } else {
                List list = new ArrayList() ;
                list.add(d) ;
                map.put(t, list) ;
            }
        }
        return map ;
    }   


    public static void main(String args[]) {
        // 准备一个集合
        final int loop = 10 ;
        List list = new ArrayList () ;  // size=8 * loop

            list.add(new Data().setId(1L).setCourseId(200010L).setContent("AAA")) ;
            list.add(new Data().setId(2L).setCourseId(200010L).setContent("BBB")) ;
            list.add(new Data().setId(3L).setCourseId(200011L).setContent("CCC")) ;
            list.add(new Data().setId(4L).setCourseId(200011L).setContent("DDD")) ;
            list.add(new Data().setId(5L).setCourseId(200010L).setContent("EEE")) ;
            list.add(new Data().setId(6L).setCourseId(200011L).setContent("FFF")) ;
            list.add(new Data().setId(7L).setCourseId(200010L).setContent("GGG")) ;
            list.add(new Data().setId(8L).setCourseId(200012L).setContent("HHH")) ;


        // 进行分组
        Map> map = group(list, new GroupBy() {
            @Override
            public Long groupby(Object obj) {
                Data d = (Data)obj ;
                return d.getCourseId() ;    // 分组依据为课程ID
            }
        }) ;

        Set set = map.entrySet();         
        Iterator i = set.iterator();         
        while(i.hasNext()){      
             Map.Entry> entry1=(Map.Entry>)i.next();    
             System.out.println("key="+entry1.getKey());    

             List list2 = entry1.getValue();
             for(Data d : list2){
                 System.out.println("content=" +d.getContent());    
             }
        }   

    }


}

你可能感兴趣的:(java)