import java.util.Comparator;
public class ComparatorTask implements Comparator<Object> {
private int count = 0;
/**
* compare:排序
* @param @return 设定文件
* @return String 对象类型
* @throws
* @since CodingExample Ver 1.1
*/
public int compare(Object obj1, Object obj2) {
// Object : id$$$processDate1$$$taskDate1$$$taskFinishDate1
int returnvalue = 0;
if (obj1 instanceof String) {
String str1 = (String) obj1;
String str2 = (String) obj2;
if (str1.indexOf("$$$") > 0) {
count = 0;
getNum(str1);
if (count == 3) {
// String id1 = str1.substring(0, str1.indexOf("$$$"));
String sep1 = str1.substring(str1.indexOf("$$$") + 3);
String processDate1 = sep1.substring(0, sep1.indexOf("$$$")).trim();
String taskDate1 = sep1.substring(sep1.indexOf("$$$") + 3, sep1.lastIndexOf("$$$")).trim();
String taskFinishDate1 = sep1.substring(sep1.lastIndexOf("$$$") + 3).trim();
// String id2 = str2.substring(0, str2.indexOf("$$$"));
String sep2 = str2.substring(str2.indexOf("$$$") + 3);
String processDate2 = sep2.substring(0, sep2.indexOf("$$$")).trim();
String taskDate2 = sep2.substring(sep2.indexOf("$$$") + 3, sep2.lastIndexOf("$$$")).trim();
String taskFinishDate2 = sep2.substring(sep2.lastIndexOf("$$$") + 3).trim();
// 先根据processDate1降序排,相同则根据taskDate1升序排,再根据taskFinishDate1升序排
returnvalue = (compareStr(processDate1, processDate2) == 0 ? (compareStr(taskDate1, taskDate2) == 0 ? (compareStr(taskFinishDate1, taskFinishDate2) == 0 ? 0 : compareStr(taskFinishDate1, taskFinishDate2)) : compareStr(taskDate1, taskDate2)) : compareStr(processDate2, processDate1));
}
}
}
return returnvalue;
}
/**
* compareStr:对String类型排序
* @param @return 设定文件
* @return String 对象类型
* @throws
* @since CodingExample Ver 1.1
*/
public int compareStr(String o1, String o2) {
String s1 = (String) o1;
String s2 = (String) o2;
int len1 = s1.length();
int len2 = s2.length();
int n = Math.min(len1, len2);
char v1[] = s1.toCharArray();
char v2[] = s2.toCharArray();
int pos = 0;
while (n-- != 0) {
char c1 = v1[pos];
char c2 = v2[pos];
if (c1 != c2) {
return c1 - c2;
}
pos++;
}
return len1 - len2;
}
/**
* compareInt:对int类型排序
* @param @return 设定文件
* @return String 对象类型
* @throws
* @since CodingExample Ver 1.1
*/
public int compareInt(Integer o1, Integer o2) {
int val1 = o1.intValue();
int val2 = o2.intValue();
return (val1 < val2 ? -1 : (val1 == val2 ? 0 : 1));
}
/**
* compareBoolean:对Boolean类型排序
* @param @return 设定文件
* @return String 对象类型
* @throws
* @since CodingExample Ver 1.1
*/
public int compareBoolean(Boolean o1, Boolean o2) {
return (o1.equals(o2) ? 0 : (o1.booleanValue() == true ? 1 : -1));
}
private void getNum(String name) {
if (name.contains("$$$")) {
count++;
getNum(name.substring(name.indexOf("$$$") + 3));
} else {
return;
}
}
}
分享到:
相关推荐
Java中的Comparator接口是排序的关键工具,它允许程序员自定义对象的比较规则,从而在集合、数组或树结构(如TreeSet、TreeMap)中实现定制化的排序。在Java的Collections框架中,Comparator扮演着重要的角色,特别...
当需要对`List`中的对象进行自定义排序时,`Comparator`接口就派上了用场。`Comparator`是一个可以比较两个对象的类,它提供了一种方式来定义自定义的比较规则,从而实现灵活的排序逻辑。 `Comparator`接口位于`...
以下是一个实现`Comparator`接口的例子: ```java import java.util.Comparator; public class CustomerComparator implements Comparator<Customer> { @Override public int compare(Customer c1, Customer c2)...
在上面的例子中,我们创建了一个匿名内部类来实现`Comparator`,然后使用`Double.compare()`方法确保了薪水的正确比较。 Apache Commons Lang库提供了`ComparatorUtils`类,它提供了一些方便的工厂方法,可以帮助...
在Java编程中,`Comparator`接口是用于比较对象的关键工具,尤其在进行自定义排序时。这个接口提供了`compare()`方法,根据特定的规则来决定两个对象的相对顺序。当需要根据多个排序条件对集合进行排序时,可以使用...
这个例子展示了如何将字符串 "一"、"二"、"三" 转换成对应的整数值进行排序,使得 "一二" 二" 三"。通过调用 Arrays.sort 方法并传入自定义的 SampleComparator 实例,可以对包含这些字符串的数组进行排序。 **二、...
下面是一个使用Comparator的例子: ```java public class AbsComparator implements Comparator<Integer> { @Override public int compare(Integer o1, Integer o2) { return Math.abs(o1) - Math.abs(o2); // ...
在这个例子中,`MyObject`是我们想要排序的对象,`MyComparator`将决定`MyObject`实例的排序顺序。 `day12`这个文件名可能表示这是一个学习或教程的一部分,可能包含了第12天的学习内容,涵盖了`Comparator`和...
在这个例子中,我们首先将RowKey的字节数组转换为字符串,然后将其解析为整数,最后使用Integer的compare方法进行比较。这样,我们就可以确保按照数值大小而非字典序进行排序。 在HBase的表定义或者ColumnFamily...
要注意的是List,Set,Queue继承了Collection接口,...这里想用一个简单的例子展示一下他们的使用,内容包括:List、Map、Set、Queue,Collections、Comparable与Comparator,排序、搜索,内部类,泛型、重写equals、hashCode
在之前文章的例子中,我们使用Comparator.comparing静态方法构建了一个Comparator接口的实例,我们再来简单介绍一下。先来看一下Mask类是怎么写的: package one.more.study; /** * 口罩 * @author 万猫学社 */ ...
本文将深入探讨如何实现Comparator接口,并通过一个实际的日期排序例子来展示其用法。 Comparator接口位于java.util包下,它提供了一个compare()方法,该方法接收两个对象作为参数并返回一个整数值。当需要对非自然...
在这个例子中,`sort`标签并没有直接用于排序,而是通过提交表单触发Action的执行,Action根据Comparator对列表进行排序。在JSP页面中,用户可以改变`comparator.field`的值,从而改变排序的字段。 总结来说,`...
假设我们有一个需要排序的Person对象列表,Person对象包含name和age属性,我们可以定义一个Comparator接口的实现,使用Lambda表达式: ```java List<Person> people = ... // 初始化Person对象的列表 // 使用...
在这个例子中,list1使用默认的自然排序,即升序排列;而list2通过传入一个Comparator实现了降序排列。 总的来说,Comparable适用于那些需要根据自身属性进行排序的对象,比如基本类型包装类或自定义类;而...
.NET开发基础从简单的例子理解泛型 泛型是.NET框架中的一个重要特性,它允许开发者创建类型安全且可重用的数据结构和算法。泛型的主要优点在于提高了代码的灵活性、效率和安全性,避免了不必要的类型转换,并减少了...
在上面的例子中,自定义的student类没有实现Comparable接口,而是使用了Arrays.sort()方法和自定义的Comparator来实现排序。通过重写compareTo()方法,可以根据年龄降序排列student对象: ```java class ...
对于上述例子,可以改写为: ```java Collections.sort(list, (s1, s2) -> s1.length() - s2.length()); ``` ### 4. `Comparator`的其他方法 - `thenComparing(Comparator<? super T> other)`:在当前比较器的...