/** * <p>Title: CheckUtil.java</p> * <p>Description: </p> * @author dsc * @date 2020年5月21日 * @version 1.0 */ package cn.timer.api.utils; import java.lang.reflect.Field; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; /** * <p> * Title: CheckUtil.java * </p> * <p> * Description: 判断对象是否包含空值 * </p> * * @author dsc * @date 2020年5月21日 * @version 1.0 */ public class CheckUtil { /** * 检查对象是否有空字段 * * @param obj 实体对象 * @return 有则返回true */ public static <T> boolean checkObjFieldIsNull(T obj) { boolean flag = false; for (Field f : obj.getClass().getDeclaredFields()) { f.setAccessible(true); try { if (f.get(obj) == null) { flag = true; return flag; } } catch (IllegalArgumentException | IllegalAccessException e) { e.printStackTrace(); } } return flag; } /** * 交集 * * @param <T> * @param list1 * @param list2 * @return list1与list2中相同的字段list */ public static <T> List<T> intersection(List<T> list1, List<T> list2) { return list1.stream().filter(item -> list2.contains(item)).collect(Collectors.toList()); } /** * 列表取差集 * * @param <T> * @param list1 * @param list2 * @return list2中未包含list1的参数list */ public static <T> List<T> reduce(List<T> list1, List<T> list2) { return list1.stream().filter(item -> !list2.contains(item)).collect(Collectors.toList()); } /** * 并集 * * @param <T> * @param list1 * @param list2 * @param isDistinct 是否去重 * @return */ public static <T> List<T> distinct(List<T> list1, List<T> list2, boolean isDistinct) { list1.addAll(list2); if (!isDistinct) return list1; return list1.stream().distinct().collect(Collectors.toList()); } /** * 字段条件去重 * @param <T> * @param keyExtractor * @return */ public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) { Map<Object, Boolean> seen = new ConcurrentHashMap<>(); return object -> seen.putIfAbsent(keyExtractor.apply(object), Boolean.TRUE) == null; } // public static void main(String[] args) { // List<String> list1 = new ArrayList<String>(); // list1.add("a"); // list1.add("b"); // list1.add("c"); // list1.add("d"); // list1.add("3"); // List<String> list2 = new ArrayList<String>(); // list2.add("a"); // list2.add("b"); // list2.add("e"); // list2.add("3"); // System.err.println(intersection(list1, list2)); // System.err.println(reduce(list1, list2)); // System.err.println(distinct(list1, list2, false)); // } }