package com.suning.cpm.utils;
import lombok.extern.slf4j.Slf4j;
import net.sf.cglib.beans.BeanCopier;
import org.apache.commons.collections.CollectionUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
/**
* @author 20014258
* @date 2021/1/19
*/
@Slf4j
public class GeneralUtils {
private final static AtomicInteger COUNT_ID = new AtomicInteger();
/**
* 多集合(过滤空集合)取交集retain公共方法
*/
public static Collection retain(Collection<Collection> c){
Optional result = c.parallelStream()
.filter(element -> CollectionUtils.isNotEmpty(element))
.reduce((m1, m2)->{
m1.retainAll(m2);
return m1;
});
return (Collection) result.get();
}
/**
* 多集合(过滤空集合)取交集retain公共方法 参数String
*/
public static List<String> retainElementList(List<List<String>> elementLists) {
Optional<List<String>> result = elementLists.parallelStream()
.filter(elementList -> CollectionUtils.isNotEmpty(elementList))
.reduce((a, b) -> {
a.retainAll(b);
return a;
});
return result.orElse(new ArrayList<>());
}
/**
* 性能更好的对象拷贝属性
* 要比 BeanUtils.copyProperties 快n倍
* @param source
* @param target
*/
public static void copyProperties(Object source, Object target) {
BeanCopier copier = BeanCopier.create(source.getClass(), target.getClass(), false);
copier.copy(source, target, null);
}
/**
* 统计字符串出现的次数
* @param str
* @param find
* @return
*/
public static int countString(String str, String find) {
int count = 0;
while (str.indexOf(find) != -1) {
count++;
str = str.substring(str.indexOf(find) + find.length());
}
return count;
}
/**
* List转换成IN参数
*
* @param listString
* @return
*/
public static String listToIn(List<String> listString) {
String result = "";
for (String str : listString) {
if (StringUtils.isBlank(str)) {
continue;
}
result = result + ",'" + str + "'";
}
result = result.replaceFirst(",", "");
return result;
}
/**
* 当前时间戳 + 三位自增ID
* 202107151936001
*
* @return
*/
public static String getUniqueId() {
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmm");
return formatter.format(System.currentTimeMillis()) + String.format("%1$03d", COUNT_ID.incrementAndGet());
}
}