1 package com.easycom.util; 2 3 import java.lang.reflect.Field; 4 import java.util.ArrayList; 5 import java.util.Date; 6 import java.util.List; 7 8 import org.apache.poi.ss.formula.functions.T; 9 10 public class CommonUtil<T> { 11 //属性的类型集合(基本类型) 12 public static String GENERICTYPES[] = {"class java.lang.Integer", "int", 13 "class java.lang.Double", "double", "class java.lang.Boolean", "boolean", 14 "class java.lang.Float", "float", "class java.lang.Character", "char", 15 "class java.lang.short", "short", "class java.lang.Byte", "byte", 16 "class java.lang.Long", "long", 17 "class java.lang.String", "class java.util.Date"}; 18 19 //根据对象属性的名称,而对list进行排序 20 public List<T> sortByName( String sort, boolean orderBl, List<T> list){ 21 //检查是否合法 22 if ( list.size() <= 0 || sort == null || "".equals(sort) ) { 23 return list; 24 } 25 26 //得到GENERICTYPES的指针 27 int indexType = getMethodName( sort , list.get(0)); 28 if ( indexType < 0) { 29 return list; 30 } 31 32 //开始排序 33 List<T> newList = new ArrayList<T>(); 34 //收集移除list的位置指针 35 int reIndex[] = new int[list.size()]; 36 int count = 0; 37 try{ 38 T t; 39 while(list.size()>0){ 40 t = list.get(0); 41 Object oldValue = getFieldValue(t, sort); 42 int index = 0; 43 if(oldValue != null) { 44 for(int j = 1; j < list.size();j++){ 45 Object newValue = getFieldValue(list.get(j), sort); 46 if(newValue == null){ 47 t = list.get(j); 48 index = j; 49 break; 50 } 51 int temp = compareAllType(oldValue, newValue, indexType); 52 if(orderBl){ 53 if(temp > 0){ 54 t = list.get(j); 55 oldValue = newValue; 56 index = j; 57 } 58 }else{ 59 if(temp < 0){ 60 t = list.get(j); 61 oldValue = newValue; 62 index = j; 63 } 64 } 65 } 66 } 67 newList.add(t); 68 reIndex[count++] = index; 69 list.remove(index); 70 } 71 }catch(Exception e){ 72 /* 73 * 出错不排序; 74 * 还原list. 75 */ 76 e.printStackTrace(); 77 for(count--; count >= 0; count--){ 78 if(reIndex[count] >= list.size()) { 79 list.add(newList.get(count)); 80 } else { 81 list.add(reIndex[count], newList.get(count)); 82 } 83 newList.remove(count); 84 } 85 return list; 86 } 87 88 return newList; 89 } 90 91 //根据属性名,得到对象的属性的值 92 public Object getFieldValue(T t, String name) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ 93 Field newField = t.getClass().getDeclaredField(name); 94 newField.setAccessible(true); 95 return (Object)newField.get(t); 96 } 97 98 //得到T对象中该属性的类型GENERICTYPES的指针 99 public int getMethodName( String name, T t){ 100 int indexType = -1; 101 try { 102 Field flds = t.getClass().getDeclaredField(name); 103 String type = flds.getGenericType().toString(); 104 for ( int i = 0; i < GENERICTYPES.length ; i++ ) { 105 if ( GENERICTYPES[i].equals( type ) ){ 106 indexType = i; 107 break; 108 } 109 } 110 } catch (NoSuchFieldException e) { 111 return indexType; 112 } catch (SecurityException e) { 113 return indexType; 114 } 115 return indexType; 116 } 117 118 public int compareAllType(Object oldValue, Object newValue, int indexType){ 119 int temp = 0; 120 if( indexType < 16 ) { 121 indexType = indexType >>> 1; 122 switch (indexType) { 123 //int 124 case 0: 125 temp = (int)oldValue-(int)newValue; 126 break; 127 //double 128 case 1: 129 if((double)oldValue>(double)newValue){ 130 temp = 1; 131 }else if((double)oldValue>(double)newValue){ 132 temp = -1; 133 }else{ 134 temp = 0; 135 } 136 break; 137 //boolean 138 case 2: 139 if((boolean)oldValue) { 140 temp = 1; 141 } else { 142 temp = -1; 143 } 144 break; 145 //float 146 case 3: 147 if((float)oldValue>(float)newValue){ 148 temp = 1; 149 }else if((float)oldValue>(float)newValue){ 150 temp = -1; 151 }else{ 152 temp = 0; 153 } 154 break; 155 //char 156 case 4: 157 if((char)oldValue>(char)newValue){ 158 temp = 1; 159 }else if((char)oldValue>(char)newValue){ 160 temp = -1; 161 }else{ 162 temp = 0; 163 } 164 break; 165 //short 166 case 5: 167 if((short)oldValue>(short)newValue){ 168 temp = 1; 169 }else if((short)oldValue>(short)newValue){ 170 temp = -1; 171 }else{ 172 temp = 0; 173 } 174 break; 175 //byte 176 case 6: 177 if((byte)oldValue>(byte)newValue){ 178 temp = 1; 179 }else if((byte)oldValue>(byte)newValue){ 180 temp = -1; 181 }else{ 182 temp = 0; 183 } 184 break; 185 //long 186 case 7: 187 if((long)oldValue>(long)newValue){ 188 temp = 1; 189 }else if((long)oldValue>(long)newValue){ 190 temp = -1; 191 }else{ 192 temp = 0; 193 } 194 break; 195 //其余状况不排序 196 default: 197 temp = 0; 198 break; 199 } 200 } else { 201 switch (indexType) { 202 //String 203 case 16: 204 temp = oldValue.toString().compareTo(newValue.toString()); 205 break; 206 //Date 207 case 17: 208 Date oldDate = (Date)oldValue; 209 Date newDate = (Date)newValue; 210 if(oldDate.getTime() > newDate.getTime()){ 211 temp = 1; 212 }else if(oldDate.getTime() < newDate.getTime()){ 213 temp = -1; 214 }else{ 215 temp = 0; 216 } 217 break; 218 //其余状况不排序 219 default: 220 temp = 0; 221 break; 222 } 223 } 224 return temp; 225 } 226 227 228 229 public static void main(String[] agrs){ 230 int j = 10; 231 Object bObject = j; 232 System.out.println(bObject); 233 } 234 235 }