apache之beanutils包比较工具类ComparatorUtils
关于beanutilsbeanutils是apache开源组织中的一个包,主要是为了更好的让开发者隔离JAVA包中自带的及其strus,spring等框架中
复杂的bean工具类的使用。
开源地址:http://commons.apache.org/beanutils/
这里主要介绍下beanutils下的ComparatorUtils的使用
直接上代码
public class Person {
int id;
private String name;
int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public Person(){}
public String toString() {
return "";
}
}
我们先按原先java自带的方式来处理
public class ComparatorDemo implements java.util.Comparator {
public int compare(Object o1, Object o2) {
if (o1 instanceof Person) {
//按ID倒叙 name正序重新排列
Person p1 = (Person) o1;
Person p2 = (Person) o2;
if (p1.getId() > p2.getId())
return -1;
else if (p1.getId() < p2.getId())
return 1;
else {
if (p1.getName().compareTo(p2.getName()) > 0)
return 1;
else if (p1.getName().compareTo(p2.getName()) == 0)
return 0;
else
return -1;
}
}
return 0;
}
public static void main(String[] args) {
String names[]={"a","b"};
ArrayListlist=new ArrayList();
list.add(new Person(1,names, 20));
list.add(new Person(1,names, 21));
list.add(new Person(2,names, 22));
list.add(new Person(3,names, 24));
list.add(new Person(2,names, 23));
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Person person = (Person) iterator.next();
System.out.println(person.getId()+"--"+person.getName());
}
Collections.sort(list,new ComparatorDemo());
System.err.println("****对比前后*****");
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Person person = (Person) iterator.next();
System.out.println(person.getId()+"--"+person.getName());
}
}
}
打印结果:
1--b
1--a
2--b
3--b
2--a
****对比前后*****
3--b
2--a
2--b
1--a
1--b
然后我们在用beanutils包下的
ComparatorUtils来实现
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.ComparatorUtils;
import org.apache.commons.collections.comparators.ComparableComparator;
import org.apache.commons.collections.comparators.ComparatorChain;
public class ComparatorUtilDemo {
public static void main(String[] args) {
String names[]={"a","b"};
ArrayListlist=new ArrayList();
list.add(new Person(1,names, 20));
list.add(new Person(1,names, 21));
list.add(new Person(2,names, 22));
list.add(new Person(3,names, 24));
list.add(new Person(2,names, 23));
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Person person = (Person) iterator.next();
System.out.println(person.getId()+"--"+person.getName());
}
//
Comparator mycmp=ComparableComparator.getInstance();
mycmp=ComparatorUtils.nullLowComparator(mycmp);//允许null
mycmp=ComparatorUtils.reversedComparator(mycmp);//逆序
ArrayListsortFields=new ArrayList();
sortFields.add(new BeanComparator("id",mycmp));
sortFields.add(new BeanComparator("name"));
ComparatorChain multiSort=new ComparatorChain(sortFields);
Collections.sort(list, multiSort);
System.err.println("****对比前后*****");
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Person person = (Person) iterator.next();
System.out.println(person.getId()+"--"+person.getName());
}
}
}
打印结果:
1--b
1--a
2--b
3--b
2--a
****对比前后*****
3--b
2--a
2--b
1--a
1--b
发现两者结果一样。当然也可以选用Comparable来实现,效果是一样的
区别在于当我们不想改变原先代码逻辑的情况下,使用Comparable会更合适。
the end!
页:
[1]