package com.easycom.util;java
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;apache
import org.apache.poi.ss.formula.functions.T;函數
public class CommonUtil
//屬性的類型集合(基本類型)
public static String GENERICTYPES[] = {"class java.lang.Integer", "int",
"class java.lang.Double", "double", "class java.lang.Boolean", "boolean",
"class java.lang.Float", "float", "class java.lang.Character", "char",
"class java.lang.short", "short", "class java.lang.Byte", "byte",
"class java.lang.Long", "long",
"class java.lang.String", "class java.util.Date"};
//根據對象屬性的名稱,而對list進行排序 public List<T> sortByName( String sort, boolean orderBl, List<T> list){ //檢查是否合法 if ( list.size() <= 0 || sort == null || "".equals(sort) ) { return list; } //得到getter或is方法名稱 Map<String, Object> map = getMethodName( sort , list.get(0)); if ( map == null) { return list; } String name = map.get("name").toString(); int indexType = (int)map.get("indexType"); //開始排序 List<T> newList = new ArrayList<T>(); try{ T t; while(list.size()>0){ t = list.get(0); Object oldValue = (Object)t.getClass().getMethod(name).invoke(t); int index = 0; if(oldValue != null) { for(int j = 1; j < list.size();j++){ Object newValue = (Object)list.get(j).getClass().getMethod(name).invoke(list.get(j)); if(newValue == null){ t = list.get(j); index = j; break; } int temp = compareAllType(oldValue, newValue, indexType); if(orderBl){ if(temp > 0){ t = list.get(j); oldValue = (Object)t.getClass().getMethod(name).invoke(t); index = j; } }else{ if(temp < 0){ t = list.get(j); oldValue = (Object)t.getClass().getMethod(name).invoke(t); index = j; } } } } newList.add(t); list.remove(index); } }catch(Exception e){ e.printStackTrace(); } return newList; } public int compareAllType(Object oldValue, Object newValue, int indexType){ int temp = 0; if( indexType < 16 ) { indexType = indexType >>> 1; switch (indexType) { //int case 0: temp = (int)oldValue-(int)newValue; break; //double case 1: if((double)oldValue>(double)newValue){ temp = 1; }else if((double)oldValue>(double)newValue){ temp = -1; }else{ temp = 0; } break; //boolean case 2: if((boolean)oldValue) { temp = 1; } else { temp = -1; } break; //float case 3: if((float)oldValue>(float)newValue){ temp = 1; }else if((float)oldValue>(float)newValue){ temp = -1; }else{ temp = 0; } break; //char case 4: if((char)oldValue>(char)newValue){ temp = 1; }else if((char)oldValue>(char)newValue){ temp = -1; }else{ temp = 0; } break; //short case 5: if((short)oldValue>(short)newValue){ temp = 1; }else if((short)oldValue>(short)newValue){ temp = -1; }else{ temp = 0; } break; //byte case 6: if((byte)oldValue>(byte)newValue){ temp = 1; }else if((byte)oldValue>(byte)newValue){ temp = -1; }else{ temp = 0; } break; //long case 7: if((long)oldValue>(long)newValue){ temp = 1; }else if((long)oldValue>(long)newValue){ temp = -1; }else{ temp = 0; } break; //其餘狀況不排序 default: temp = 0; break; } } else { switch (indexType) { //String case 16: temp = oldValue.toString().compareTo(newValue.toString()); break; //Date case 17: Date oldDate = (Date)oldValue; Date newDate = (Date)newValue; if(oldDate.getTime() > newDate.getTime()){ temp = 1; }else if(oldDate.getTime() < newDate.getTime()){ temp = -1; }else{ temp = 0; } break; //其餘狀況不排序 default: temp = 0; break; } } return temp; } //判斷實體中是否存在該屬性,存在,則搜索出指針 public int validSort( String sort, T t) { Field[] flds = t.getClass().getDeclaredFields(); int index = -1; if ( flds != null ){ for ( int i = 0; i < flds.length; i++ ){ if(sort.equals(flds[i].getName())){ index = i; break; } } } return index; } //得到屬性類型的指針 public int validType( String type ) { int index = -1; for ( int i = 0; i < GENERICTYPES.length ; i++ ) { if ( GENERICTYPES[i].equals( type ) ){ index = i; break; } } return index; } //得到T對象中的getter或is方法名稱 public Map<String, Object> getMethodName( String name, T t){ //是否存在函數名 Field[] flds = t.getClass().getDeclaredFields(); int indexName = validSort( name, t ); if( indexName <= -1){ return null; } //是否存在該數據類型 int indexType = validType ( flds[indexName].getGenericType().toString() ); if ( indexType <= -1 ) { return null; } Map<String, Object> map = new HashMap<String, Object>(); map.put( "indexType", indexType ); //構造方法名 name = name.substring(0,1).toUpperCase() + name.substring(1); if( "boolean".equals( GENERICTYPES[indexType] ) ) { name = "is" + name; }else{ name = "get" + name; } map.put( "name", name ); return map; } //根據屬性的類型type、方法的名稱、及該對象,得到該屬性的值 public T valueByType ( String type, String name, T t){ return null; } public static void main(String[] agrs){ Date date = new Date(); int j = 10; Object bObject = j; System.out.println(bObject); }
}code