﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-seasun-随笔分类-3.6 BeanUtils</title><link>http://www.blogjava.net/shiwenfeng/category/43344.html</link><description>在不断模仿、思考、总结中一步一步进步！</description><language>zh-cn</language><lastBuildDate>Wed, 30 Dec 2009 03:43:39 GMT</lastBuildDate><pubDate>Wed, 30 Dec 2009 03:43:39 GMT</pubDate><ttl>60</ttl><item><title>Beanutils基本用法</title><link>http://www.blogjava.net/shiwenfeng/archive/2009/12/30/307731.html</link><dc:creator>shiwf</dc:creator><author>shiwf</author><pubDate>Wed, 30 Dec 2009 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/shiwenfeng/archive/2009/12/30/307731.html</guid><wfw:comment>http://www.blogjava.net/shiwenfeng/comments/307731.html</wfw:comment><comments>http://www.blogjava.net/shiwenfeng/archive/2009/12/30/307731.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shiwenfeng/comments/commentRss/307731.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shiwenfeng/services/trackbacks/307731.html</trackback:ping><description><![CDATA[<p><span style="font-size: 10pt">Beanutils用了魔术般的反射技术，实现了很多夸张有用的功能，都是C/C++时代不敢想的。无论谁的项目，始终一天都会用得上它。我算是后知后觉了，第一回看到它的时候居然错过。</span></p>
<p><span style="font-size: 10pt"><strong>1.属性的动态getter,setter </strong></span></p>
<div><span style="font-size: 10pt">在这框架满天飞的年代，不能事事都保证执行getter,setter函数了，有时候属性是要需要根据名字动态取得的，就像这样：　　</span></div>
<pre><span style="font-size: 10pt">BeanUtils.getProperty(myBean,"code");</span></pre>
<div><span style="font-size: 10pt">而BeanUtils更强的功能是直接访问内嵌对象的属性，只要使用点号分隔。</span></div>
<pre><span style="font-size: 10pt">BeanUtils.getProperty(orderBean, "address.city");</span></pre>
<div><span style="font-size: 10pt">相比之下其他类库的BeanUtils通常都很简单，不能访问内嵌的对象，所以经常要用Commons BeanUtils替换它们。<br />
BeanUtils还支持List和Map类型的属性。如下面的语法即可取得顾客列表中第一个顾客的名字</span></div>
<pre><span style="font-size: 10pt">BeanUtils.getProperty(orderBean, "customers[1].name");</span></pre>
<div><span style="font-size: 10pt">其中BeanUtils会使用ConvertUtils类把字符串转为Bean属性的真正类型，方便从HttpServletRequest等对象中提取bean，或者把bean输出到页面。</span></div>
<div><span style="font-size: 10pt">而PropertyUtils就会原色的保留Bean原来的类型。</span></div>
<p><span style="font-size: 10pt"><strong>2.beanCompartor 动态排序 </strong></span></p>
<div><span style="font-size: 10pt">还是通过反射，动态设定Bean按照哪个属性来排序，而不再需要在bean的Compare接口进行复杂的条件判断。 </span></div>
<pre><span style="font-size: 10pt">List peoples = ...; // Person对象的列表Collections.sort(peoples, new BeanComparator("age"));</span></pre>
<p><span style="font-size: 10pt">如果要支持多个属性的复合排序，如"Order By lastName,firstName" </span></p>
<pre><span style="font-size: 10pt">ArrayList sortFields = new ArrayList();sortFields.add(new BeanComparator("lastName"));</span></pre>
<pre><span style="font-size: 10pt">sortFields.add(new BeanComparator("firstName"));</span></pre>
<pre><span style="font-size: 10pt">ComparatorChain multiSort = new ComparatorChain(sortFields);</span></pre>
<pre><span style="font-size: 10pt">Collections.sort(rows,multiSort);</span></pre>
<p><span style="font-size: 10pt">其中ComparatorChain属于jakata commons-collections包。<br />
如果age属性不是普通类型，构造函数需要再传入一个comparator对象为age变量排序。<br />
另外, BeanCompartor本身的ComparebleComparator, 遇到属性为null就会抛出异常, 也不能设定升序还是降序。<br />
这个时候又要借助commons-collections包的ComparatorUtils.</span></p>
<p><span style="font-size: 10pt">&nbsp;&nbsp; Comparator mycmp = ComparableComparator.getInstance();<br />
&nbsp;&nbsp;&nbsp;mycmp = ComparatorUtils.nullLowComparator(mycmp);&nbsp; //允许null<br />
&nbsp;&nbsp; mycmp = ComparatorUtils.reversedComparator(mycmp); //逆序<br />
&nbsp;&nbsp; Comparator cmp = new BeanComparator(sortColumn, mycmp);</span></p>
<span style="font-size: 10pt"><strong>3.Converter 把Request或ResultSet中的字符串绑定到对象的属性 </strong></span>
<p><span style="font-size: 10pt">&nbsp;&nbsp; 经常要从request,resultSet等对象取出值来赋入bean中，下面的代码谁都写腻了，如果不用MVC框架的绑定功能的话。</span></p>
<pre><span style="font-size: 10pt">   String a = request.getParameter("a");   bean.setA(a);   String b = ....</span></pre>
<p><span style="font-size: 10pt">不妨写一个Binder:</span></p>
<pre><span style="font-size: 10pt">     MyBean bean = ...;    HashMap map = new HashMap();    Enumeration names = request.getParameterNames();    while (names.hasMoreElements())    {      String name = (String) names.nextElement();      map.put(name, request.getParameterValues(name));    }    BeanUtils.populate(bean, map);</span></pre>
<p><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp; 其中BeanUtils的populate方法或者getProperty,setProperty方法其实都会调用convert进行转换。<br />
&nbsp;&nbsp;&nbsp;&nbsp;但Converter只支持一些基本的类型，甚至连java.util.Date类型也不支持。而且它比较笨的一个地方是当遇到不认识的类型时，居然会抛出异常来。<br />
&nbsp;&nbsp;&nbsp; 对于Date类型，我参考它的sqldate类型实现了一个Converter,而且添加了一个设置日期格式的函数。<br />
要把这个Converter注册，需要如下语句：<br />
</span></p>
<pre><span style="font-size: 10pt">    ConvertUtilsBean convertUtils = new ConvertUtilsBean();<br />
&nbsp;&nbsp;  DateConverter dateConverter = new DateConverter();<br />
&nbsp;&nbsp;  convertUtils.register(dateConverter,Date.class);<br />
<br />
<br />
<br />
//因为要注册converter,所以不能再使用BeanUtils的静态方法了，必须创建BeanUtilsBean实例<br />
BeanUtilsBean beanUtils = new BeanUtilsBean(convertUtils,new PropertyUtilsBean());<br />
beanUtils.setProperty(bean, name, value);</span></pre>
<span style="font-size: 10pt"><font size="3"><strong>4 其他功能</strong></font> </span>
<div><strong><span style="font-size: 10pt">4.1 PropertyUtils，当属性为Collection,Map时的动态读取：</span></strong></div>
<div><span style="font-size: 10pt">&nbsp;</span></div>
<div><span style="font-size: 10pt">Collection: 提供index</span></div>
<div><span style="font-size: 10pt">&nbsp;&nbsp; BeanUtils.getIndexedProperty(orderBean,"items",1);<br />
或者<br />
&nbsp; BeanUtils.getIndexedProperty(orderBean,"items[1]");<br />
<br />
Map: 提供Key Value<br />
&nbsp; BeanUtils.getMappedProperty(orderBean, "items","111");//key-value goods_no=111 <br />
或者<br />
&nbsp; BeanUtils.getMappedProperty(orderBean, "items(111)") </span></div>
<div><span style="font-size: 10pt">&nbsp;</span></div>
<div>
<div><strong><span style="font-size: 10pt">4.2 PropertyUtils，获取属性的Class类型</span></strong></div>
</div>
<pre><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; public static Class getPropertyType(Object bean, String name)</span></pre>
<div><span style="font-size: 10pt">&nbsp;</span></div>
<div><strong><span style="font-size: 10pt">4.3 ConstructorUtils，动态创建对象</span></strong></div>
<div>
<pre><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static Object invokeConstructor(Class klass, Object arg)</span></pre>
<pre><strong><span style="font-size: 10pt">4.4 MethodUtils，动态调用方法</span></strong></pre>
<pre><span style="font-size: 10pt">    MethodUtils.invokeMethod(bean, methodName, parameter);</span></pre>
<span style="font-size: 10pt"><strong>4.5 动态Bean </strong>见</span><a href="http://blog.csdn.<a%20class='channel_keylink'%20href='http://www.2okok.com/Soft/Class203/Index.html'>net</a>/calvinxiu/archive/2005/02/02/277765.aspx" target=__blank><span style="font-size: 10pt">用DynaBean减除不必要的VO和FormBean&nbsp;</span></a><br />
</div>
<img src ="http://www.blogjava.net/shiwenfeng/aggbug/307731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shiwenfeng/" target="_blank">shiwf</a> 2009-12-30 11:24 <a href="http://www.blogjava.net/shiwenfeng/archive/2009/12/30/307731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BeanUtils之集合排序</title><link>http://www.blogjava.net/shiwenfeng/archive/2009/12/30/307729.html</link><dc:creator>shiwf</dc:creator><author>shiwf</author><pubDate>Wed, 30 Dec 2009 03:20:00 GMT</pubDate><guid>http://www.blogjava.net/shiwenfeng/archive/2009/12/30/307729.html</guid><wfw:comment>http://www.blogjava.net/shiwenfeng/comments/307729.html</wfw:comment><comments>http://www.blogjava.net/shiwenfeng/archive/2009/12/30/307729.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shiwenfeng/comments/commentRss/307729.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shiwenfeng/services/trackbacks/307729.html</trackback:ping><description><![CDATA[<div class="blog_content">
<p><span style="font-size: 10pt">1.<font size="+0">BeanUtils基本用法：</font></span></p>
<div class="code_title"><span style="font-size: 10pt">java 代码</span></div>
<div class="dp-highlighter">
<div class="bar">
<ol class="dp-j">
    <li class="alt"><span style="font-size: 10pt"><span><span class="keyword">package</span><span>&nbsp;com.beanutil; &nbsp;&nbsp;</span></span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span><span style="font-size: 10pt"><span class="keyword">import</span><span>&nbsp;java.util.Map; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span><span style="font-size: 10pt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;User&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;id; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Map&nbsp;map; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;username; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getId()&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;id; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setId(Integer&nbsp;id)&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.id&nbsp;=&nbsp;id; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Map&nbsp;getMap()&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;map; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setMap(Map&nbsp;map)&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.map&nbsp;=&nbsp;map; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getUsername()&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;username; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setUsername(String&nbsp;username)&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.username&nbsp;=&nbsp;username; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>}&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<div class="code_title">
<div class="code_title"><span style="font-size: 10pt">java 代码</span></div>
<div class="dp-highlighter">
<div class="bar">
<ol class="dp-j">
    <li class="alt"><span style="font-size: 10pt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Order&nbsp;{ &nbsp;&nbsp;</span></span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;User&nbsp;user; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Integer&nbsp;id; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;desc; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getDesc()&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;desc; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setDesc(String&nbsp;desc)&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.desc&nbsp;=&nbsp;desc; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Integer&nbsp;getId()&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;id; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setId(Integer&nbsp;id)&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.id&nbsp;=&nbsp;id; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;User&nbsp;getUser()&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;user; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setUser(User&nbsp;user)&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.user&nbsp;=&nbsp;user; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>}&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p><span style="font-size: 10pt">&nbsp;</span></p>
<div class="code_title"><span style="font-size: 10pt">java 代码</span></div>
<div class="dp-highlighter">
<div class="bar">
<ol class="dp-j">
    <li class="alt"><span style="font-size: 10pt"><span><span>&nbsp;&nbsp;</span></span> </span>
    <li class=""><span><span style="font-size: 10pt"><span class="keyword">import</span><span>&nbsp;java.util.HashMap; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span><span style="font-size: 10pt"><span class="keyword">import</span><span>&nbsp;java.util.Map; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span><span style="font-size: 10pt"><span class="keyword">import</span><span>&nbsp;org.apache.commons.beanutils.BeanUtils; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span><span style="font-size: 10pt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Test&nbsp;{ &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;User&nbsp;user&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User(); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Order&nbsp;order1&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Order(); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Order&nbsp;order2&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Order(); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Order&nbsp;order3&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Order(); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Map&nbsp;map&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;HashMap(); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;User&nbsp;user1&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User(); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Test(){ &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init(); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception{ &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test&nbsp;test&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Test(); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//输出某个对象的某个属性 </span><span>&nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(BeanUtils.getProperty(test.user,&nbsp;</span><span class="string">"username"</span><span>)); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//输出某个对象的内嵌属性,只要使用点号分隔 </span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(BeanUtils.getProperty(test.order1,&nbsp;</span><span class="string">"user.username"</span><span>)); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//BeanUtils还支持List和Map类型的属性,对于Map类型，则需要以"属性名（key值）"的 </span><span>&nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//对于Indexed，则为"属性名[索引值]"，注意对于ArrayList和数组都可以用一样的方式进行操作 </span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(BeanUtils.getProperty(test.user1,&nbsp;</span><span class="string">"map(order2).desc"</span><span>)); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//拷贝对象的属性值 </span><span>&nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;tempUser&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;User(); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BeanUtils.copyProperties(tempUser,&nbsp;test.user1); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(tempUser.getUsername()); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(tempUser.getId()); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//初始化 </span><span>&nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;init(){ &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setId(</span><span class="number">0</span><span>); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setUsername(</span><span class="string">"zhangshan"</span><span>); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order1.setId(</span><span class="number">1</span><span>); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order1.setDesc(</span><span class="string">"order1"</span><span>); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order1.setUser(user); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order2.setId(</span><span class="number">2</span><span>); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order2.setDesc(</span><span class="string">"order2"</span><span>); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order2.setUser(user); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order3.setId(</span><span class="number">3</span><span>); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order3.setDesc(</span><span class="string">"order3"</span><span>); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order3.setUser(user); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(</span><span class="string">"order1"</span><span>,&nbsp;order1); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(</span><span class="string">"order2"</span><span>,&nbsp;order2); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(</span><span class="string">"order3"</span><span>,&nbsp;order3); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1.setId(</span><span class="number">1</span><span>); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1.setUsername(</span><span class="string">"lisi"</span><span>); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user1.setMap(map); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>} &nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p><span style="font-size: 10pt">&nbsp;</span></p>
<p><span style="font-size: 10pt">输出结果为：</span></p>
<p><span style="font-size: 10pt">zhangshan<br />
zhangshan<br />
order2<br />
lisi<br />
1</span></p>
<p><span style="font-size: 10pt">&nbsp;</span></p>
<p><span style="font-size: 10pt">2. <font size="+0">BeanCompartor 动态排序 </font></span></p>
<p><span style="font-size: 10pt">A:动态设定Bean按照哪个属性来排序，而不再需要再实现bean的Compare接口进行复杂的条件判断</span></p>
<div class="code_title"><span style="font-size: 10pt">java 代码</span></div>
<div class="dp-highlighter">
<div class="bar">
<ol class="dp-j">
    <li class="alt"><span style="font-size: 10pt"><span><span class="comment">//动态设定Bean按照哪个属性来排序，而不再需要再实现bean的Compare接口进行复杂的条件判断 </span><span>&nbsp;&nbsp;</span></span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;order&gt;&lt;/order&gt;&nbsp;list&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ArrayList&lt;order&gt;&lt;/order&gt;(); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(test.order2); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(test.order1); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(test.order3); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//未排序前 </span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(Order&nbsp;order&nbsp;:&nbsp;list){ &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(order.getId()); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//排序后 </span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collections.sort(list,&nbsp;</span><span class="keyword">new</span><span>&nbsp;BeanComparator(</span><span class="string">"id"</span><span>)); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(Order&nbsp;order&nbsp;:&nbsp;list){ &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(order.getId()); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p><span style="font-size: 10pt">&nbsp;</span></p>
<p><span style="font-size: 10pt">B:<font size="+0">支持多个属性的复合排序</font></span></p>
<div class="code_title"><span style="font-size: 10pt">java 代码</span></div>
<div class="dp-highlighter">
<div class="bar">
<ol class="dp-j">
    <li class="alt"><span style="font-size: 10pt"><span><span class="comment">//支持多个属性的复合排序 </span><span>&nbsp;&nbsp;</span></span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;&lt;beancomparator&gt;&lt;/beancomparator&gt;&nbsp;sortFields&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ArrayList&lt;beancomparator&gt;&lt;/beancomparator&gt;();&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortFields.add(</span><span class="keyword">new</span><span>&nbsp;BeanComparator(</span><span class="string">"id"</span><span>)); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortFields.add(</span><span class="keyword">new</span><span>&nbsp;BeanComparator(</span><span class="string">"desc"</span><span>)); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ComparatorChain&nbsp;multiSort&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ComparatorChain(sortFields); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collections.sort(list,&nbsp;multiSort); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(Order&nbsp;order&nbsp;:&nbsp;list){ &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(order.getId()); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p><span style="font-size: 10pt">&nbsp;</span></p>
<p><span style="font-size: 10pt">C:使用ComparatorUtils进一步指定排序条件</span></p>
<p><span style="font-size: 10pt">上面的排序遇到属性为null就会抛出异常, 也不能设定升序还是降序。<br />
&nbsp;&nbsp;不过，可以借助commons-collections包的ComparatorUtils<br />
&nbsp;&nbsp;BeanComparator，ComparableComparator和ComparatorChain都是实现了Comparator这个接口</span></p>
<div class="code_title"><span style="font-size: 10pt">java 代码</span></div>
<div class="dp-highlighter">
<div class="bar">
<ol class="dp-j">
    <li class="alt"><span style="font-size: 10pt"><span><span class="comment">//上面的排序遇到属性为null就会抛出异常,&nbsp;也不能设定升序还是降序。 </span><span>&nbsp;&nbsp;</span></span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//不过，可以借助commons-collections包的ComparatorUtils </span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//BeanComparator，ComparableComparator和ComparatorChain都是实现了Comparator这个接口 </span><span>&nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Comparator&nbsp;mycmp&nbsp;=&nbsp;ComparableComparator.getInstance();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mycmp&nbsp;=&nbsp;ComparatorUtils.nullLowComparator(mycmp);&nbsp;&nbsp;</span><span class="comment">//允许null&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mycmp&nbsp;=&nbsp;ComparatorUtils.reversedComparator(mycmp);&nbsp;</span><span class="comment">//逆序&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Comparator&nbsp;cmp&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;BeanComparator(</span><span class="string">"id"</span><span>,&nbsp;mycmp); &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collections.sort(list,&nbsp;cmp); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(Order&nbsp;order&nbsp;:&nbsp;list){ &nbsp;&nbsp;</span> </span>
    <li class=""><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(order.getId()); &nbsp;&nbsp;</span> </span>
    <li class="alt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
</div>
</div>
</div>
</span></span></span></span></div>
</div>
</div>
</span></span></div>
</div>
<img src ="http://www.blogjava.net/shiwenfeng/aggbug/307729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shiwenfeng/" target="_blank">shiwf</a> 2009-12-30 11:20 <a href="http://www.blogjava.net/shiwenfeng/archive/2009/12/30/307729.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>