package com. zhengqing. demo. ListUtil ;
import com. alibaba. fastjson. JSONObject ;
import java. math. BigDecimal ;
import java. util. * ;
import java. util. stream. Collectors ;
public class ListUtil {
public static < T > Map < String , List < T > > groupList ( List < T > list, String groupName) {
return list. stream ( ) . collect ( Collectors . groupingBy ( e -> JSONObject . parseObject ( JSONObject . toJSONString ( e) , Map . class ) . get ( groupName) . toString ( ) ) ) ;
}
public static < T > BigDecimal sumList ( List < T > list, String sumName) {
List < Map > maps = JSONObject . parseArray ( JSONObject . toJSONString ( list) , Map . class ) ;
return maps. stream ( ) . map ( e -> new BigDecimal ( String . valueOf ( e. get ( sumName) ) ) ) . reduce ( BigDecimal . ZERO , BigDecimalUtils :: sum ) ;
}
public static < T > List < T > filtList ( List < T > list, String filtName, List < Object > values, Class < T > tClass) {
List < Map > maps = JSONObject . parseArray ( JSONObject . toJSONString ( list) , Map . class ) ;
for ( Object value : values) {
maps = maps. stream ( ) . filter ( a -> ! a. get ( filtName) . equals ( value) ) . collect ( Collectors . toList ( ) ) ;
}
return JSONObject . parseArray ( JSONObject . toJSONString ( maps) , tClass) ;
}
public static < T > List < T > distinctByKey ( List < T > list, List < String > keys, Class < T > tClass) {
List < Map > maps = JSONObject . parseArray ( JSONObject . toJSONString ( list) , Map . class ) ;
for ( String key : keys) {
maps = maps. stream ( ) . collect ( Collectors . collectingAndThen (
Collectors . toCollection ( ( ) -> new TreeSet < > ( Comparator . comparing ( p -> String . valueOf ( p. get ( key) ) ) ) ) ,
ArrayList :: new ) ) ;
}
return JSONObject . parseArray ( JSONObject . toJSONString ( maps) , tClass) ;
}
public static < T > boolean isEmpty ( List < T > list) {
return null == list || 0 == list. size ( ) ;
}
public static < T > boolean isNotEmpty ( List < T > list) {
return ! isEmpty ( list) ;
}
public static void main ( String [ ] args) {
List < Map > list = new ArrayList < > ( ) ;
int i = 5 ;
for ( int i1 = 0 ; i1 < i; i1++ ) {
Map user = new HashMap ( ) ;
user. put ( "id" , i1) ;
user. put ( "age" , i1) ;
user. put ( "name" , "v" ) ;
if ( i1 > 3 ) {
user. put ( "name" , "k" ) ;
}
list. add ( user) ;
}
Map < String , List < Map > > age = groupList ( list, "age" ) ;
System . out. println ( "age = " + JSONObject . toJSONString ( age) ) ;
BigDecimal age1 = sumList ( list, "age" ) ;
System . out. println ( "age = " + age1) ;
List < Object > objects = new ArrayList < > ( ) ;
objects. add ( 1 ) ;
objects. add ( 2 ) ;
List < Map > id = filtList ( list, "id" , objects, Map . class ) ;
id. forEach ( System . out:: println ) ; ;
List objects1 = new ArrayList < > ( ) ;
objects1. add ( "name" ) ;
List < Map > objects2 = distinctByKey ( list, objects1, Map . class ) ;
objects2. forEach ( System . out:: println ) ;
}
}
package com. zhengqing. demo. ListUtil ;
import java. math. BigDecimal ;
public class BigDecimalUtils {
public static BigDecimal ifNullSet0 ( BigDecimal in) {
if ( in != null ) {
return in;
}
return BigDecimal . ZERO ;
}
public static BigDecimal sum ( BigDecimal . . . in) {
BigDecimal result = BigDecimal . ZERO ;
for ( int i = 0 ; i < in. length; i++ ) {
result = result. add ( ifNullSet0 ( in[ i] ) ) ;
}
return result;
}
}