<h1>
    <span class="link_title"><a href="/yangxiaojun9238/article/details/51500934">
    JAVA 集合 List 分组的两种方法            
    </a></span>
</h1>
    <div class="article_manage clearfix">
    <div class="article_r">
        <span class="link_postdate">2016-05-25 19:25</span>
        <span class="link_view" title="阅读次数">2243人阅读</span>
        <span class="link_comments" title="评论次数"> <a href="#comments" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_pinglun'])">评论</a>(0)</span>
        <span class="link_collect tracking-ad" data-mod="popu_171"> <a href="javascript:void(0);" onclick="javascript:collectArticle('JAVA+%e9%9b%86%e5%90%88+List+%e5%88%86%e7%bb%84%e7%9a%84%e4%b8%a4%e7%a7%8d%e6%96%b9%e6%b3%95','51500934');return false;" title="收藏" target="_blank">收藏</a></span>
         <span class="link_report"> <a href="#report" onclick="javascript:report(51500934,2);return false;" title="举报">举报</a></span>

    </div>
</div>
<div class="embody" style="display:none" >
    <span class="embody_t">本文章已收录于:</span>
    <div class="embody_c" ></div>
</div>
<style type="text/css">        
        .embody{
            padding:10px 10px 10px;
            margin:0 -20px;
            border-bottom:solid 1px #ededed;                
        }
        .embody_b{
            margin:0 ;
            padding:10px 0;
        }
        .embody .embody_t,.embody .embody_c{
            display: inline-block;
            margin-right:10px;
        }
        .embody_t{
            font-size: 12px;
            color:#999;
        }
        .embody_c{
            font-size: 12px;
        }
        .embody_c img,.embody_c em{
            display: inline-block;
            vertical-align: middle;               
        }
         .embody_c img{               
            width:30px;
            height:30px;
        }
        .embody_c em{
            margin: 0 20px 0 10px;
            color:#333;
            font-style: normal;
        }
</style>
<script type="text/javascript">
    $(function () {
        try
        {
            var lib = eval("("+$("#lib").attr("value")+")");
            var html = "";
            if (lib.err == 0) {
                $.each(lib.data, function (i) {
                    var obj = lib.data[i];
                    //html += '<img src="' + obj.logo + '"/>' + obj.name + "&nbsp;&nbsp;";
                    html += ' <a href="' + obj.url + '" target="_blank">';
                    html += ' <img src="' + obj.logo + '">';
                    html += ' <em><b>' + obj.name + '</b></em>';
                    html += ' </a>';
                });
                if (html != "") {
                    setTimeout(function () {
                        $("#lib").html(html);                      
                        $("#embody").show();
                    }, 100);
                }
            }      
        } catch (err)
        { }
        
    });
</script>
  <div class="category clearfix">
    <div class="category_l">
       <img src="http://static.blog.csdn.net/images/category_icon.jpg">
        <span>分类:</span>
    </div>
    <div class="category_r">
                <label onclick="GetCategoryArticles('1088196','yangxiaojun9238','top','51500934');">
                    <span onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_fenlei']);">JAVASE学习笔记<em>(22)</em></span>
                  <img class="arrow-down" src="http://static.blog.csdn.net/images/arrow_triangle _down.jpg" style="display:inline;">
                  <img class="arrow-up" src="http://static.blog.csdn.net/images/arrow_triangle_up.jpg" style="display:none;">
                    <div class="subItem">
                        <div class="subItem_t"><a href="http://blog.csdn.net/yangxiaojun9238/article/category/1088196" target="_blank">作者同类文章</a><i class="J_close">X</i></div>
                        <ul class="subItem_l" >                            
                        </ul>
                    </div>
                </label>                    
    </div>
</div>
<script type="text/javascript" src="http://static.blog.csdn.net/scripts/category.js"></script>  

从网上找了两种方法,效率差不多,这里贴出代码供大家参考

实体类Data

  1. public class Data {  
  2.   
  3.     private Long id ;  
  4.     private Long courseId ;  
  5.     private String content ;  
  6.   
  7.     public Long getId() {  
  8.         return id;  
  9.     }  
  10.   
  11.     public Data setId(Long id) {  
  12.         this.id = id;  
  13.         return this ;  
  14.     }  
  15.   
  16.     public Long getCourseId() {  
  17.         return courseId;  
  18.     }  
  19.   
  20.     public Data setCourseId(Long courseId) {  
  21.         this.courseId = courseId;  
  22.         return this ;  
  23.     }  
  24.   
  25.     public String getContent() {  
  26.         return content;  
  27.     }  
  28.   
  29.     public Data setContent(String content) {  
  30.         this.content = content;  
  31.         return this ;  
  32.     }  
  33.       
  34. }  
public class Data {
private Long id ;
private Long courseId ;
private String content ;

public Long getId() {
    return id;
}

public Data setId(Long id) {
    this.id = id;
    return this ;
}

public Long getCourseId() {
    return courseId;
}

public Data setCourseId(Long courseId) {
    this.courseId = courseId;
    return this ;
}

public String getContent() {
    return content;
}

public Data setContent(String content) {
    this.content = content;
    return this ;
}

}



排序类

  1. <pre name="code" class="java">import java.lang.reflect.Method;  
  2. import java.util.ArrayList;  
  3. import java.util.Collection;  
  4. import java.util.HashMap;  
  5. import java.util.Iterator;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8.   
  9. import com.framework.util.ParamUtils;  
  10.   
  11. public class CommonUtils {  
  12.   
  13.     /** 
  14.      * 分組依據接口,用于集合分組時,獲取分組依據 
  15.      *  
  16.      * @author ZhangLiKun 
  17.      * @title GroupBy 
  18.      * @date 2013-4-23 
  19.      */  
  20.     public interface GroupBy<T> {  
  21.         T groupby(Object obj);  
  22.     }  
  23.   
  24.     /** 
  25.      *  
  26.      * @param colls 
  27.      * @param gb 
  28.      * @return 
  29.      */  
  30.     public static final <T extends Comparable<T>, D> Map<T, List<D>> group(Collection<D> colls, GroupBy<T> gb) {  
  31.         if (colls == null || colls.isEmpty()) {  
  32.             System.out.println("分組集合不能為空!");  
  33.             return null;  
  34.         }  
  35.         if (gb == null) {  
  36.             System.out.println("分組依據接口不能為Null!");  
  37.             return null;  
  38.         }  
  39.         Iterator<D> iter = colls.iterator();  
  40.         Map<T, List<D>> map = new HashMap<T, List<D>>();  
  41.         while (iter.hasNext()) {  
  42.             D d = iter.next();  
  43.             T t = gb.groupby(d);  
  44.             if (map.containsKey(t)) {  
  45.                 map.get(t).add(d);  
  46.             } else {  
  47.                 List<D> list = new ArrayList<D>();  
  48.                 list.add(d);  
  49.                 map.put(t, list);  
  50.             }  
  51.         }  
  52.         return map;  
  53.     }  
  54.     /** 
  55.      * 将List<V>按照V的methodName方法返回值(返回值必须为K类型)分组,合入到Map<K, List<V>>中<br> 
  56.      * 要保证入参的method必须为V的某一个有返回值的方法,并且该返回值必须为K类型 
  57.      *  
  58.      * @param list 
  59.      *            待分组的列表 
  60.      * @param map 
  61.      *            存放分组后的map 
  62.      * @param clazz 
  63.      *            泛型V的类型 
  64.      * @param methodName 
  65.      *            方法名 
  66.      */  
  67.     public static <K, V> void listGroup2Map(List<V> list, Map<K, List<V>> map, Class<V> clazz, String methodName) {  
  68.         // 入参非法行校验  
  69.         if (null == list || null == map || null == clazz || !ParamUtils.chkString(methodName)) {  
  70.             System.out.print("CommonUtils.listGroup2Map 入参错误,list:" + list + " ;map:" + map + " ;clazz:" + clazz + " ;methodName:" + methodName);  
  71.             return;  
  72.         }  
  73.   
  74.         // 获取方法  
  75.         Method method = getMethodByName(clazz, methodName);  
  76.         // 非空判断  
  77.         if (null == method) {  
  78.             return;  
  79.         }  
  80.   
  81.         // 正式分组  
  82.         listGroup2Map(list, map, method);  
  83.     }  
  84.     /** 
  85.      * 根据类和方法名,获取方法对象 
  86.      *  
  87.      * @param clazz 
  88.      * @param methodName 
  89.      * @return 
  90.      */  
  91.     public static Method getMethodByName(Class<?> clazz, String methodName) {  
  92.         Method method = null;  
  93.         // 入参不能为空  
  94.         if (null == clazz || !ParamUtils.chkString(methodName)) {  
  95.             System.out.print("CommonUtils.getMethodByName 入参错误,clazz:" + clazz + " ;methodName:" + methodName);  
  96.             return method;  
  97.         }  
  98.   
  99.         try {  
  100.             method = clazz.getDeclaredMethod(methodName);  
  101.         } catch (Exception e) {  
  102.             System.out.print("类获取方法失败!");  
  103.         }  
  104.   
  105.         return method;  
  106.     }  
  107.     /** 
  108.      * 将List<V>按照V的某个方法返回值(返回值必须为K类型)分组,合入到Map<K, List<V>>中<br> 
  109.      * 要保证入参的method必须为V的某一个有返回值的方法,并且该返回值必须为K类型 
  110.      *  
  111.      * @param list 
  112.      *            待分组的列表 
  113.      * @param map 
  114.      *            存放分组后的map 
  115.      * @param method 
  116.      *            方法 
  117.      */  
  118.     @SuppressWarnings("unchecked")  
  119.     public static <K, V> void listGroup2Map(List<V> list, Map<K, List<V>> map, Method method) {  
  120.         // 入参非法行校验  
  121.         if (null == list || null == map || null == method) {  
  122.             System.out.print("CommonUtils.listGroup2Map 入参错误,list:" + list + " ;map:" + map + " ;method:" + method);  
  123.             return;  
  124.         }  
  125.   
  126.         try {  
  127.             // 开始分组  
  128.             Object key;  
  129.             List<V> listTmp;  
  130.             for (V val : list) {  
  131.                 key = method.invoke(val);  
  132.                 listTmp = map.get(key);  
  133.                 if (null == listTmp) {  
  134.                     listTmp = new ArrayList<V>();  
  135.                     map.put((K) key, listTmp);  
  136.                 }  
  137.                 listTmp.add(val);  
  138.             }  
  139.         } catch (Exception e) {  
  140.             System.out.print("分组失败!");  
  141.         }  
  142.     }  
  143.   
  144. }  
import com.framework.util.ParamUtils;

public class CommonUtils {

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

/**
 * 
 * @param colls
 * @param gb
 * @return
 */
public static final &lt;T extends Comparable&lt;T&gt;, D&gt; Map&lt;T, List&lt;D&gt;&gt; group(Collection&lt;D&gt; colls, GroupBy&lt;T&gt; gb) {
	if (colls == null || colls.isEmpty()) {
		System.out.println("分組集合不能為空!");
		return null;
	}
	if (gb == null) {
		System.out.println("分組依據接口不能為Null!");
		return null;
	}
	Iterator&lt;D&gt; iter = colls.iterator();
	Map&lt;T, List&lt;D&gt;&gt; map = new HashMap&lt;T, List&lt;D&gt;&gt;();
	while (iter.hasNext()) {
		D d = iter.next();
		T t = gb.groupby(d);
		if (map.containsKey(t)) {
			map.get(t).add(d);
		} else {
			List&lt;D&gt; list = new ArrayList&lt;D&gt;();
			list.add(d);
			map.put(t, list);
		}
	}
	return map;
}
/**
 * 将List&lt;V&gt;按照V的methodName方法返回值(返回值必须为K类型)分组,合入到Map&lt;K, List&lt;V&gt;&gt;中&lt;br&gt;
 * 要保证入参的method必须为V的某一个有返回值的方法,并且该返回值必须为K类型
 * 
 * @param list
 *            待分组的列表
 * @param map
 *            存放分组后的map
 * @param clazz
 *            泛型V的类型
 * @param methodName
 *            方法名
 */
public static &lt;K, V&gt; void listGroup2Map(List&lt;V&gt; list, Map&lt;K, List&lt;V&gt;&gt; map, Class&lt;V&gt; clazz, String methodName) {
	// 入参非法行校验
	if (null == list || null == map || null == clazz || !ParamUtils.chkString(methodName)) {
		System.out.print("CommonUtils.listGroup2Map 入参错误,list:" + list + " ;map:" + map + " ;clazz:" + clazz + " ;methodName:" + methodName);
		return;
	}

	// 获取方法
	Method method = getMethodByName(clazz, methodName);
	// 非空判断
	if (null == method) {
		return;
	}

	// 正式分组
	listGroup2Map(list, map, method);
}
/**
 * 根据类和方法名,获取方法对象
 * 
 * @param clazz
 * @param methodName
 * @return
 */
public static Method getMethodByName(Class&lt;?&gt; clazz, String methodName) {
	Method method = null;
	// 入参不能为空
	if (null == clazz || !ParamUtils.chkString(methodName)) {
		System.out.print("CommonUtils.getMethodByName 入参错误,clazz:" + clazz + " ;methodName:" + methodName);
		return method;
	}

	try {
		method = clazz.getDeclaredMethod(methodName);
	} catch (Exception e) {
		System.out.print("类获取方法失败!");
	}

	return method;
}
/**
 * 将List&lt;V&gt;按照V的某个方法返回值(返回值必须为K类型)分组,合入到Map&lt;K, List&lt;V&gt;&gt;中&lt;br&gt;
 * 要保证入参的method必须为V的某一个有返回值的方法,并且该返回值必须为K类型
 * 
 * @param list
 *            待分组的列表
 * @param map
 *            存放分组后的map
 * @param method
 *            方法
 */
@SuppressWarnings("unchecked")
public static &lt;K, V&gt; void listGroup2Map(List&lt;V&gt; list, Map&lt;K, List&lt;V&gt;&gt; map, Method method) {
	// 入参非法行校验
	if (null == list || null == map || null == method) {
		System.out.print("CommonUtils.listGroup2Map 入参错误,list:" + list + " ;map:" + map + " ;method:" + method);
		return;
	}

	try {
		// 开始分组
		Object key;
		List&lt;V&gt; listTmp;
		for (V val : list) {
			key = method.invoke(val);
			listTmp = map.get(key);
			if (null == listTmp) {
				listTmp = new ArrayList&lt;V&gt;();
				map.put((K) key, listTmp);
			}
			listTmp.add(val);
		}
	} catch (Exception e) {
		System.out.print("分组失败!");
	}
}

}






测试类

  1. import java.util.ArrayList;  
  2. import java.util.LinkedHashMap;  
  3. import java.util.List;  
  4. import java.util.Map;  
  5.   
  6. import com.framework.common.CommonUtils.GroupBy;  
  7.   
  8. public class Test {  
  9.   
  10.     /** 
  11.      * @param args 
  12.      */  
  13.     public static void main(String[] args) {  
  14.         // 准备一个集合  
  15.   
  16.         final int loop = 1000 * 1000;  
  17.         List<Data> list = new ArrayList<Data>(); // size=8 * loop  
  18.         for (int i = 0; i < loop; i++) {  
  19.             list.add(new Data().setId(1L).setCourseId(200010L).setContent("AAA"));  
  20.             list.add(new Data().setId(2L).setCourseId(200010L).setContent("BBB"));  
  21.             list.add(new Data().setId(3L).setCourseId(200011L).setContent("CCC"));  
  22.             list.add(new Data().setId(4L).setCourseId(200011L).setContent("DDD"));  
  23.             list.add(new Data().setId(5L).setCourseId(200010L).setContent("EEE"));  
  24.             list.add(new Data().setId(6L).setCourseId(200011L).setContent("FFF"));  
  25.             list.add(new Data().setId(7L).setCourseId(200010L).setContent("GGG"));  
  26.             list.add(new Data().setId(8L).setCourseId(200012L).setContent("HHH"));  
  27.         }  
  28.         // 进行分组 1  
  29.         long time = System.currentTimeMillis();  
  30.         Map<Long, List<Data>> map2 = new LinkedHashMap<Long, List<Data>>();  
  31.         CommonUtils.listGroup2Map(list, map2, Data.class"getId");// 输入方法名  
  32.           
  33.         long duration = System.currentTimeMillis() - time;  
  34.   
  35.         System.out.println("分组一执行:" + duration + "毫秒!");  
  36.   
  37.         // 分组二  
  38.         time = System.currentTimeMillis();  
  39.         Map<Long, List<Data>> map = CommonUtils.group(list, new GroupBy<Long>() {  
  40.             @Override  
  41.             public Long groupby(Object obj) {  
  42.                 Data d = (Data) obj;  
  43.                 return d.getCourseId(); // 分组依据为课程ID  
  44.             }  
  45.         });  
  46.   
  47.         duration = System.currentTimeMillis() - time;  
  48.   
  49.         System.out.println("分组二执行:" + duration + "毫秒!");  
  50.   
  51.     }  
  52.   
  53. }  
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.framework.common.CommonUtils.GroupBy;

public class Test {

/**
 * @param args
 */
public static void main(String[] args) {
	// 准备一个集合

	final int loop = 1000 * 1000;
	List&lt;Data&gt; list = new ArrayList&lt;Data&gt;(); // size=8 * loop
	for (int i = 0; i &lt; loop; i++) {
		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"));
	}
	// 进行分组 1
	long time = System.currentTimeMillis();
	Map&lt;Long, List&lt;Data&gt;&gt; map2 = new LinkedHashMap&lt;Long, List&lt;Data&gt;&gt;();
	CommonUtils.listGroup2Map(list, map2, Data.class, "getId");// 输入方法名
	
	long duration = System.currentTimeMillis() - time;

	System.out.println("分组一执行:" + duration + "毫秒!");

	// 分组二
	time = System.currentTimeMillis();
	Map&lt;Long, List&lt;Data&gt;&gt; map = CommonUtils.group(list, new GroupBy&lt;Long&gt;() {
		@Override
		public Long groupby(Object obj) {
			Data d = (Data) obj;
			return d.getCourseId(); // 分组依据为课程ID
		}
	});

	duration = System.currentTimeMillis() - time;

	System.out.println("分组二执行:" + duration + "毫秒!");

}

}



    <div >
        <dl >
           
             <dt>顶</dt>
            <dd>1</dd>
        </dl>
       
          
        <dl >
          
              <dt>踩</dt>
            <dd>0</dd>               
        </dl>
        
    </div>
 <div class="tracking-ad" data-mod="popu_222"><a href="javascript:void(0);" target="_blank">&nbsp;</a>   </div>
<div class="tracking-ad" data-mod="popu_223"> <a href="javascript:void(0);" target="_blank">&nbsp;</a></div>
<script type="text/javascript">
            function btndigga() {
                $(".tracking-ad[data-mod='popu_222'] a").click();
            }
            function btnburya() {
                $(".tracking-ad[data-mod='popu_223'] a").click();
            }
        </script>
<div style="clear:both; height:10px;"></div>


    <div class="similar_article" style="">
            <h4>我的同类文章</h4>
            <div class="similar_c" style="margin:20px 0px 0px 0px">
                <div class="similar_c_t">
                            <label class="similar_cur">
                                <span style="cursor:pointer" onclick="GetCategoryArticles('1088196','yangxiaojun9238','foot','51500934');">JAVASE学习笔记<em>(22)</em></span>
                            </label>
                </div>
               
                <div class="similar_wrap tracking-ad" data-mod="popu_141" style="max-height:195px;">
                    <a href="http://blog.csdn.net" style="display:none" target="_blank">http://blog.csdn.net</a>
                    <ul class="similar_list fl"><li><em>•</em><a href="http://blog.csdn.net/yangxiaojun9238/article/details/52234786" >对BigDecimal常用方法的归类</a><span>2012-03-06</span><label><i>阅读</i><b>233</b></label></li> </ul>

                    <ul class="similar_list fr"><li><em>•</em><a href="http://blog.csdn.net/yangxiaojun9238/article/details/10171861" >日期转换</a><span>2012-03-02</span><label><i>阅读</i><b>174</b></label></li> </ul>
                <a href="http://blog.csdn.net/yangxiaojun9238/article/category/1088196" class="MoreArticle">更多文章</a></div>
            </div>
        </div>    
<script type="text/javascript">
    $(function () {
        GetCategoryArticles('1088196', 'yangxiaojun9238','foot','51500934');
    });
</script>
<div>
        <div class="J_adv" data-view="true" data-mod="ad_popu_205" data-mtp="43" data-order="114" data-con="ad_content_1900" style="width: 728px; height: 90px;"><script src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><ins class="adsbygoogle" style="display:inline-block;width:728px;height:90px" data-ad-client="ca-pub-8990951720398508" data-ad-slot="8267689356/3776917242" data-adsbygoogle-status="done"><ins ></iframe></ins></ins></ins><script>(adsbygoogle=window.adsbygoogle || []).push({});</script></div> 
 </div>

参考知识库

JAVA 集合 List 分组的两种方法

Java SE知识库

JAVA 集合 List 分组的两种方法

Java EE知识库

JAVA 集合 List 分组的两种方法

Java 知识库

JAVA 集合 List 分组的两种方法

软件测试知识库

更多资料请参考:
 <dt><span>猜你在找</span></dt>    





<div > 
    <script src="http://csdnimg.cn/jobreco/job_reco.js" type="text/javascript"></script> 
    <script type="text/javascript">
        csdn.position.showEdu({
            sourceType: "blog",
            searchType: "detail",
            searchKey: "51500934",
            username: "",
            recordcount: "5",
            containerId: "adCollege" //容器DIV的id。 
        });
    </script> 
<div class="tracking-ad" data-mod="popu_84"><dd style="background:url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px; white-space: nowrap;"><a href="http://edu.csdn.net/course/detail/2981" title="java语言从入门到精通2016+项目实训" strategy="v4:content" target="_blank">java语言从入门到精通2016+项目实训</a></dd><dd style="background:url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px; white-space: nowrap;"><a href="http://edu.csdn.net/course/detail/3767" title="JavaScript面向对象的编程视频课程第二季 对象" strategy="v4:content" target="_blank">JavaScript面向对象的编程视频课程第二季 对象</a></dd><dd style="background:url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px; white-space: nowrap;"><a href="http://edu.csdn.net/course/detail/765" title="深入浅出Java的反射" strategy="v4:content" target="_blank">深入浅出Java的反射</a></dd><dd style="background:url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px; white-space: nowrap;"><a href="http://edu.csdn.net/course/detail/3577" title="java核心技术精讲" strategy="v4:content" target="_blank">java核心技术精讲</a></dd><dd style="background:url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px; white-space: nowrap;"><a href="http://edu.csdn.net/course/detail/395" title="零基础学Java系列从入门到精通" strategy="v4:content" target="_blank">零基础学Java系列从入门到精通</a></dd></div></div>  


 <div >Java面试题整理</a></dd></div>
<div >        
<!-- 广告位开始 -->
<div class="J_adv" data-view="true" data-mod="ad_popu_72" data-mtp="62" data-order="40" data-con="ad_content_2072"><script ></script></div>
<!-- 广告位结束 -->
查看评论

  暂无评论

[注册]
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

相关文章: