java list 排序
根据自己讲解一下java list排序
操作方法
- 01
pojo类: public class ApexDictionary(){ private String value; private BigDecimal dictionaryOrder; private String getValue() { return value; } private void setValue(String value){ this.value = value; } public BigDecimal getDictionaryOrder() { return dictionaryOrder; } public void setDictionaryOrder(BigDecimal dictionaryOrder) { this.dictionaryOrder = dictionaryOrder; }} pojo类根据自己实际情况进行定义。
- 02
设置数据: 例如我们是从数据库中查询出来的结果设置进去,如果数据不是按某个顺序放进去的话,当我们想换这个顺序取出来时就有些困难了。所以我们需要对这个结果排序。
- 03
取出来的数据是list.那么我们利用collections.sort()方法来排下序吧。 List<Object> list = getList(); Collections.sort(list, new Comparator<Object>() { public int compare(Object a, Object b) { //处理。。。 return 0; } }
- 04
看到上面的图片,再说一下int与BigDecimal如何互相转换。 1)int 转换为BigDecimal: int a = 1; BigDecimal b = new BigDecimal(a); 2)BigDecimal转换为int: BigDecimal b = new BigDecimal(123.456); int a = b.intValue();//此时a的值为123
- 05
下面说一个比较通过的Java list 排序方法。 缺点就是需要知道要比较的对象的类型有哪些。
- 06
public void sort(List<E> list, final String method, final String sort) { if (list != null) { Collections.sort(list, new Comparator<Object>() { public int compare(Object a, Object b) { int result = 0; try { Method m1 = a.getClass().getMethod(method, null); Method m2 = b.getClass().getMethod(method, null); Object obj1 = m1.invoke(a, null); Object obj2 = m2.invoke(b, null); if(obj1 instanceof Integer){ if (sort != null && "desc".equals(sort))// 倒序 result= new Integer((int) obj2).compareTo( new Integer((int) obj1)); else// 正序 result= new Integer((int) obj1).compareTo(new Integer((int) obj2)); } else if( obj1 instanceof Date){ if (sort != null && "desc".equals(sort))// 倒序 result= ((Date) obj2).compareTo((Date) obj1); else// 正序 result= ((Date) obj1).compareTo((Date) obj2); } else{ if (sort != null && "desc".equals(sort))// 倒序 result= obj2.toString().compareTo(obj1.toString()); else// 正序 result= obj1.toString().compareTo(obj2.toString()); } } catch (Exception e) { e.printStackTrace(); } return result; } }); } }