/*
* Copyright © 2014 YAOCHEN Corporation, All Rights Reserved
*/
package com.easyooo.framework.common.util;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* 集合工具类
*
* @author Killer
*/
public abstract class ListUtil {
/**
* 分组函数,可根据规定的分组主键进行分组, 需要实现<code>GroupingKey</code> 接口
*
* @see GroupingKey
* @param src
* @return
*/
public static <K, T extends GroupingKey<K>> Map<K, List<T>> grouping(List<T> src){
Map<K, List<T>> map = new LinkedHashMap<K, List<T>>();
if(src == null || src.size() == 0){
return map;
}
for (T t : src) {
K _gk = t.getGroupingKey();
if(!map.containsKey(_gk)){
map.put(_gk, new ArrayList<T>());
}
map.get(_gk).add(t);
}
return map;
}
/**
* 给传入的集合分组,分组属性由传入的接口参数返回
* @return
*/
public static <K, T> Map<K, List<T>> grouping(List<T> src, Grouping<K, T> group){
Map<K, List<T>> map = new LinkedHashMap<K, List<T>>();
if(src == null || src.size() == 0){
return map;
}
for (T t : src) {
K _gk = group.getGroupingKey(t);
if(!map.containsKey(_gk)){
map.put(_gk, new ArrayList<T>());
}
map.get(_gk).add(t);
}
return map;
}
/**
* 将不同元素的集合按主键值转换成Map返回,
* list元素应保证唯一性,否则前面的会被覆盖
*
* @return
*/
public static <K, T> Map<K, T> groupingToEntry(List<T> src, Grouping<K, T> group){
Map<K, T> map = new LinkedHashMap<>();
if(src == null || src.size() == 0){
return map;
}
for (T t : src) {
K k = group.getGroupingKey(t);
map.put(k, t);
}
return map;
}
/**
* 获取第一个值
* @param list
* @return
*/
public static <T> T getFirstElement(List<T> list){
if(list != null && list.size() >= 1){
return list.get(0);
}
return null;
}
/**
* 属性过滤器
*
* @param dataList 数据源
* @param pf 过滤器
*/
public static <T> List<T> filterBy(List<T> dataList, PropertyFilter<T> pf){
for (Iterator<T> iterator = dataList.iterator(); iterator.hasNext();) {
if(pf.isFilter(iterator.next())){
iterator.remove();
}
}
return dataList;
}
}