java order()_java8 排序 orderBy

package com.icil.report.utils;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.Collection;

import java.util.Comparator;

import java.util.Date;

import java.util.List;

import java.util.Map;

import java.util.Optional;

import java.util.stream.Collectors;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;/**

* *************************************************************************

*

 
 

* @param

* @ClassName: : ListUtil

*

* @Description: :

*

* @Creation Date : 13 May 2019 2:48:52 PM

*

* @Author : Sea

*

*

*

***************************************************************************/@SuppressWarnings("all")public classOrderByUtils{private static Logger LOGGER=LoggerFactory.getLogger(OrderByUtils.class);//#######################################################################################################//order by java 7 && java8//######################################################################################################

/**

* @Desc: java8 parallelStream

* @param colls :需要排序的集合(pojo)

* @param firstfiledName :先按排序的字段

* @param secondfiledName ::再按排序的字段

* @return*/

//public static List orderby(Collection colls,String firstfiledName,String secondfiledName){//return colls.parallelStream().sorted(Comparator.comparing(d->getFieldStringValueByName(d,firstfiledName)).thenComparing(d->getFieldStringValueByName(d,secondfiledName))).collect(Collectors.toList());//}

/**

* @Desc: java8 parallelStream

* @param colls

* @param filedName 排序的字段

* @param fieldType 排序的字段的类型

* @return*/

public static List orderbyPro(Collectioncolls,String filedName,Class fieldType){switch(fieldType.getName()) {case "java.lang.Integer":return colls.parallelStream().sorted(Comparator.comparing(d->(Integer)getFieldValueByName(d,filedName))).collect(Collectors.toList());case "java.lang.Long":return colls.parallelStream().sorted(Comparator.comparing(d->(Long)getFieldValueByName(d,filedName))).collect(Collectors.toList());case "java.lang.Double":return colls.parallelStream().sorted(Comparator.comparing(d->(Double)getFieldValueByName(d,filedName))).collect(Collectors.toList());case "java.util.Date":return colls.parallelStream().sorted(Comparator.comparing(d->(Date)getFieldValueByName(d,filedName))).collect(Collectors.toList());case "java.lang.Float":return colls.parallelStream().sorted(Comparator.comparing(d->(Float)getFieldValueByName(d,filedName))).collect(Collectors.toList());case "java.lang.String":return colls.parallelStream().sorted(Comparator.comparing(d->(String)getFieldStringValueByName(d,filedName))).collect(Collectors.toList());default:return null;

}

}/**

*

* @param colls

* @param filedName :pojo 的属性名 如 user -->name

* @return*/

public static List orderby(Listcolls, String filedName,Class fieldType){

getMyComparator(colls,filedName,fieldType);

colls.sort(getMyComparator(colls,filedName,fieldType));returncolls;

}/**

* 通过属性名称对集合分组

* @Desc:java 8 stream api, list 会过滤掉group by filed 的非空字段

* @param colls 集合必须为对象 eg: List

* @param fieldName为集合中对象的属性名称 eg: Employee-->name

* @return

* extends Comparable*/

public static final Map> groupByPro(Collectioncolls ,String fieldName){//filter//List filterlist = colls.parallelStream().filter(r->getFieldValueByName(r,fieldName)!=null).collect(Collectors.toList());

for(D d : colls) {if(OrderByUtils.getFieldValueByName(d, fieldName)==null){

OrderByUtils.setFieldValueByName(d, fieldName,"null");

}

}//group by

Map> collect = colls.stream().collect(Collectors.groupingBy(r->getFieldValueByName(r,fieldName)));returncollect;

}/**

* 根据属性名称获取属性值

**/

public staticObject getFieldValueByName(Object pojo,String fieldName) {try{

String firstLetter= fieldName.substring(0, 1).toUpperCase();

String getter= "get" + firstLetter + fieldName.substring(1);

Method method= pojo.getClass().getMethod(getter, newClass[] {});

Object value= method.invoke(pojo, newObject[] {});returnvalue;

}catch(Exception e) {

LOGGER.error(e.getMessage(),e);return null;

}

}/**

*

* @param pojo

* @param fieldName

* @param value just can be Integer(int) Double(double) Long(ong) Date String*/

public static voidsetFieldValueByName(Object pojo,String fieldName,Object value) {try{

String firstLetter= fieldName.substring(0, 1).toUpperCase();

String seter= "set" + firstLetter + fieldName.substring(1);

value= Optional.ofNullable(value).orElseGet(()-> new String("null"));

String simpleName=value.getClass().getSimpleName();

Class class1;switch(simpleName) {case "Integer":

class1=Integer.class;break;case "Double":

class1=Double.class;break;case "Long":

class1=Long.class;break;case "Date":

class1=Date.class;break;default:

class1=String.class;break;

}

Method setmethod=pojo.getClass().getMethod(seter, class1);

setmethod.invoke(pojo,value);

}catch(Exception e) {

LOGGER.error(e.getMessage(),e);

}

}/**

* 根据属性名称获取属性值 (获取String型)

**/

public staticString getFieldStringValueByName(Object o,String fieldName) {try{

String firstLetter= fieldName.substring(0, 1).toUpperCase();

String getter= "get" + firstLetter + fieldName.substring(1);

Method method= o.getClass().getMethod(getter, newClass[] {});

String value= (String) method.invoke(o, newObject[] {});returnvalue;

}catch(Exception e) {

LOGGER.error(e.getMessage(),e);return null;

}

}public static Comparator getMyComparator(Listcolls, String filedName,Class fieldType){

Comparator comparator = new Comparator() {

@Overridepublic intcompare(E o1, E o2) {int result=0;switch(fieldType.getName()) {case "java.lang.Integer":

result= getFieldValueByNameAndType(o1,filedName,Integer.class).compareTo(getFieldValueByNameAndType(o2,filedName,Integer.class));break;case "java.lang.Long":

result= getFieldValueByNameAndType(o1,filedName,Long.class).compareTo(getFieldValueByNameAndType(o2,filedName,Long.class));break;case "java.lang.Double":

result= getFieldValueByNameAndType(o1,filedName,Double.class).compareTo(getFieldValueByNameAndType(o2,filedName,Double.class));break;case "java.util.Date":

result= getFieldValueByNameAndType(o1,filedName,Date.class).compareTo(getFieldValueByNameAndType(o2,filedName,Date.class));break;case "java.lang.Float":

result= getFieldValueByNameAndType(o1,filedName,Float.class).compareTo(getFieldValueByNameAndType(o2,filedName,Float.class));break;case "java.lang.String":

result= getFieldValueByNameAndType(o1,filedName,String.class).compareTo(getFieldValueByNameAndType(o2,filedName,String.class));break;default:

result= 0;break;

}returnresult;

}

};returncomparator;

}/**

* @param pojo

* @param fieldName

* @param fieldType

* @return*/

public static T getFieldValueByNameAndType(Object pojo,String fieldName,ClassfieldType) {try{

String firstLetter= fieldName.substring(0, 1).toUpperCase();

String getter= "get" + firstLetter + fieldName.substring(1);

Method method= pojo.getClass().getMethod(getter, newClass[] {});

T value= (T) method.invoke(pojo, newObject[] {});returnvalue;

}catch(Exception e) {

LOGGER.error(e.getMessage(),e);return null;

}

}/**

* @param

* @param pojo

* @param fieldName

* @param fieldType

* @return*/

public static T getFieldValueByNameAndType(Object pojo,String fieldName) {try{

String firstLetter= fieldName.substring(0, 1).toUpperCase();

String getter= "get" + firstLetter + fieldName.substring(1);

Field field= pojo.getClass().getDeclaredField(fieldName); //获取属性

Class> type =field.getType();

Method method=pojo.getClass().getMethod(getter, type);

T value= (T) method.invoke(pojo, newObject[] {});returnvalue;

}catch(Exception e) {

LOGGER.error(e.getMessage(),e);return null;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值