`

Arrays.sort(Comparator) 巧用

 
阅读更多
java 代码
 
  1. /** 
  2.  * <p> 
  3.  * This method simply orders the ranked query result by date. 
  4.  * </p> 
  5.  *  
  6.  * @param result ranked result to be ordered 
  7.  *  
  8.  * @return ordered result 
  9.  *  
  10.  * @throws OrderException if the order execution fails because of some reason. 
  11.  */  
  12. public RankedQueryResult order(RankedQueryResult result) throws OrderException {  
  13.     SearcherHelper.checkNull(result, "result");  
  14.   
  15.     // TreeMap(Key date, Value id) may be a choice to implement sort. But it has a problem. The  
  16.     // Date of two Documents may be equal. In that case, when put them into the Map,  
  17.     // one Document will be neglected and a bug is introduced.  
  18.     // Also, I tried Arrays.sort(rankedOrder,new Comparator(){}. But in this  
  19.     // case, we can not throw the DocumentRepositoryException from Document Repository in Comparator#compare.  
  20.     // What's more, every time it compares Date, it'll have to retrieve the Date from     // the repository.   
  21.     // Finally, I decided to implement it this way.  
  22.   
  23.     /** 
  24.      * An Object for WordSourceId Date pair for the convenience of sorting WordSourceId by Date. 
  25.      */  
  26.     final class IdDateObject {  
  27.         /** The WordSourceId this object related */  
  28.         private WordSourceId id;  
  29.   
  30.         /** The Date of the WordSourceId */  
  31.         private Date date;  
  32.   
  33.         /** 
  34.          * Constructor for the project with the related WordSourceId and its date. 
  35.          *  
  36.          * @param id the WordSourceId this object related 
  37.          * @param date the Date of the WordSourceId 
  38.          */  
  39.         IdDateObject(WordSourceId id, Date date) {  
  40.             this.id = id;  
  41.             this.date = date;  
  42.         }  
  43.   
  44.         /** 
  45.          * Returns the date of the WordSourceId. 
  46.          *  
  47.          * @return the date of the WordSourceId 
  48.          */  
  49.         Date getDate() {  
  50.             return date;  
  51.         }  
  52.   
  53.         /** 
  54.          * Returns the WordSourceId the object related. 
  55.          *  
  56.          * @return the WordSourceId the object related 
  57.          */  
  58.         WordSourceId getId() {  
  59.             return id;  
  60.         }  
  61.     }// end for final class IdDateObject  
  62.   
  63.     // constructs the IdDateObject array  
  64.     WordSourceId[] rankedOrder = result.getRankedOrder();  
  65.     IdDateObject[] idDateObjects = new IdDateObject[rankedOrder.length];  
  66.     for (int i = 0; i < rankedOrder.length; i++) {  
  67.         idDateObjects[i] = new IdDateObject(rankedOrder[i], getDocumentDate(rankedOrder[i]));  
  68.     }  
  69.   
  70.     // sort in idDateObjects  
  71.     Arrays.sort(idDateObjects, new Comparator() {  
  72.         /** 
  73.          * Compares two IdDateObject objects according to the Date. 
  74.          * <p> 
  75.          *  
  76.          * <pre> 
  77.          *   If the local variable decreasing is true: 
  78.          *      If two objects' creation Dates are equal, 0 will be returned.  
  79.          *      If arg0 greater than arg1, a positive int is returned. 
  80.          *      Else a negative is returned. 
  81.          *   Else the local variable decreasing is false: 
  82.          *      If two objects' creation Dates, 0 will be returned.  
  83.          *      If arg0 greater than arg1, a negitive integer is returned. 
  84.          *      Else a positive integer is returned. 
  85.          * </pre> 
  86.          *  
  87.          * @param arg0 the first WordSourceId to compare 
  88.          * @param arg1 the second WordSourceId to compare 
  89.          * @return an integer representing the compare result according the above rule 
  90.          * @throws ClassCastException if the arguments' types prevent them from being compared by this Comparator. 
  91.          */  
  92.         public int compare(Object arg0, Object arg1) {  
  93.             IdDateObject object1 = (IdDateObject) arg0;  
  94.             IdDateObject object2 = (IdDateObject) arg1;  
  95.             Date date0 = object1.getDate();  
  96.             Date date1 = object2.getDate();  
  97.   
  98.             int result = date0.compareTo(date1);  
  99.             if (decreasing) {  
  100.                 result *= -1;  
  101.             }  
  102.             return result;  
  103.         }  
  104.   
  105.     });  
  106.   
  107.     // retrieve sort result  
  108.     WordSourceId[] resultOrder = new WordSourceId[rankedOrder.length];  
  109.     for (int i = 0; i < idDateObjects.length; i++) {  
  110.         resultOrder[i] = idDateObjects[i].getId();  
  111.     }  
  112.     // create and return a new ranked query result ordered by date  
  113.     return new RankedQueryResult(result.getResult(), result.getAllRelevances(), resultOrder);  
  114. }  
分享到:
评论
2 楼 geek87 2009-11-18  
好东西有用。。呵呵
1 楼 talangniao 2007-07-09  
不理解这里Arrays.sort(idDateObjects, new Comparator()
new Comparator这个从哪里得来得?

相关推荐

    深入理解java中Arrays.sort()的用法

    Arrays.sort(integers, new Comparator() { public int compare(Integer o1, Integer o2) { return o2 - o1; } public boolean equals(Object obj) { return false; } }); ``` 在上面的代码中,我们可以看到...

    java中的arrays.sort()代码详解

    下面的例子中,我们定义了一个比较Dog大小的Comparator,然后将其实例对象作为参数传给sort方法,通过此示例,您应该能够快速掌握Arrays.sort()的使用方法。 在这个例子中,我们首先定义了一个Dog类,包括size属性...

    Java5.0数组排序

    在Java 5.0之前,我们通常使用`Arrays.sort()`方法来对数组进行排序,但该方法的功能相对有限。Java 5.0中,`java.util.Arrays`类和`java.util.Collections`类都得到了升级,提供了更强大的排序功能。 一、Java 5.0...

    Java容易被忽视的API

    2. `Arrays.sort(T[], int, int, Comparator)` 和 `Arrays.sort(T[], Comparator)` 适用于泛型数组,其中 `Comparator` 参数可以自定义比较规则。 3. `Collections.sort(List)` 和 `Collections.sort(List, ...

    Java实现类排序

    除了直接在`Arrays.sort()`和`Collections.sort()`中传入`Comparator`,还可以将`Comparator`保存为成员变量,用于多次排序,或者创建静态常量供多个地方使用。 总结一下,Java实现类排序主要涉及以下步骤: 1. ...

    单词按首字母排序的两种方法

    ### 方法一:使用`Arrays.sort()`方法 在Java中,`java.util.Arrays`类提供了`sort()`方法来对数组进行排序。当对字符串数组进行排序时,`sort()`方法默认使用字典顺序进行排序,即根据ASCII值的大小进行比较。然而...

    Comparable接口和Comparator使用示例

    在 main() 方法中,我们创建了一个 Simple 对象数组,并使用 Arrays.sort() 方法对其进行排序,排序时使用 CompareTest Comparator 对象。 Comparable 和 Comparator 的区别 Comparable 接口和 Comparator 都可以...

    JAVA通过数组按首字母排序

    在给定的代码示例中,我们首先定义了一个字符串数组`arrayToSort`,然后使用`Arrays.sort()`方法对其进行排序。 ##### 1. 定义字符串数组 ```java String[] arrayToSort = new String[]{"Oscar", "Charlie", "Ryan...

    java sort排序算法实例完整代码

    `Arrays.sort()`与`Collections.sort()` - **`Arrays.sort()`**: 用于排序对象数组或基本类型的数组。对于基本类型,Java 7引入了泛型和类型推断,使得排序更加方便。对于自定义对象,`sort`会调用对象的`...

    Java sort算法学习

    5. **自定义比较器**:在`Arrays.sort()`和`Collections.sort()`中,可以传递一个`Comparator`实例,以根据自定义规则进行排序。这对于需要根据特定字段或规则排序的对象数组和列表非常有用。 6. **并行排序**:...

    JAVA中工具类Arrays和异常处理的实例操作.doc

    #### 一、Arrays工具类的使用 在Java编程语言中,`Arrays`工具类提供了许多用于数组操作的方法,这些方法极大地简化了开发人员对数组的处理过程。`Arrays`类位于`java.util`包中,它包含了一系列静态方法来支持数组...

    java-GenericSort-源码.rar

    - `Arrays.sort`:这个方法内部使用了快速排序算法,对于基本类型数组,JVM提供了优化的机器指令,而对于对象数组,它会调用Arrays.genericSort,这里涉及到了泛型擦除。 - `Collections.sort`:对于ArrayList,它...

    java类排序,很实用

    2. **提供 `Comparator&lt;T&gt;` 实例**:与 `Arrays.sort()` 类似,`Collections.sort(List&lt;T&gt; list, Comparator&lt;T&gt; c)` 允许你传递一个自定义的 `Comparator&lt;T&gt;` 来进行排序,这在需要更复杂排序逻辑时特别有用: ...

    JAVA 对象数组按照多个属性进行排序

    对于集合类,如`ArrayList`,我们可以使用`Collections.sort()`方法,它的用法与`Arrays.sort()`类似,但需要传入集合而不是数组。同样,如果需要按多个属性排序,也需提供自定义`Comparator`。 在某些情况下,Java...

    List对象集合的排序:比较器Comparator(简单例子)

    `Comparator`不仅可以用于`List`的排序,还可以在其他需要比较元素的场景中发挥作用,如`TreeSet`、`PriorityQueue`以及`Arrays.sort()`等。此外,`Comparator`还支持链式调用,可以同时比较多个属性,比如先比较...

    java的Comparator和Comparable.docx

    当一个类实现了 Comparable 接口,那么该类的对象就可以直接调用 Collections.sort 或 Arrays.sort 进行排序。 例如,User 类原本没有排序功能,但当我们让它实现 Comparable&lt;User&gt; 接口后,就可以为 User 对象添加...

    排序算法的学习demo sortes.zip

    Java的`java.util.Arrays`类提供了多种内置排序方法,如`Arrays.sort()`,可以对整数、浮点数、字符数组,以及实现了`Comparable`接口或提供了自定义`Comparator`的对象数组进行排序。但是,学习和实现排序算法有助...

    Comparable和Comparator区分1

    这样,Person类的对象可以被Collections.sort()或Arrays.sort()方法直接排序,例如: ```java Person[] people = new Person[]{new Person("xujian", 20), new Person("xiewei", 10)}; Arrays.sort(people); ``` ...

    根据 Java 中任何给定列中的值对二维数组进行排序.docx

    这可以通过使用Java内置的`Arrays.sort()`函数实现,该函数可以接受一个比较器(Comparator)来定义排序规则。 在提供的代码片段中,可以看到两种不同的实现方式: 1. 使用Lambda表达式: ```java Arrays.sort(arr...

    java排序Comparator和Comparable

    使用`Comparator`排序时,可以传递给`Collections.sort()`或`Arrays.sort()`方法,例如: ```java List&lt;MyObject&gt; list = ...; Collections.sort(list, new MyComparator()); ``` 此外,`Comparator`还可以通过...

Global site tag (gtag.js) - Google Analytics