Collection判重,去重,查重简单用法以及CollectionUtils.isEmpty
1.判重
判断集合中是否有重复元素,则可以利用java的Set集合,Set天生有不重复的buff,因此将入参通过HashSet的构造器转为Set,然后比较Set的size与原集合的size来判断是否含有重复元素。泛型注意重写equals和hashcode方法,实现代码如下:
/** * @Description:判断Collection中的元素是否有重复元素 * @param datas * 需要判断的目标集合 */ public static boolean isRepeatInCollection(Collection<?> datas) { if (datas == null) {// 为空则认为不含重复元素 return false; } if (datas instanceof Set) {//如果是set则不含有重复元素 return false; } Set<?> noRepeatSet = new HashSet<>(datas); return !(datas.size() == noRepeatSet.size()); }
2.去重
去重也是用到了Set无重复buff,直接使用Set实现类的构造方法来完成即可
/** * @Description:Collection中去重并将集合转为List * @param datas * @return */ public static <T> List<T> distinct(Collection<T> datas) { if(datas == null){ return new ArrayList<>(); } Set<T> set = new HashSet<>(datas);//使用HashSet构造方法去重 return new ArrayList<>(set); }
3.查重
找出集合类(这里的集合类指List)中重复元素,查重主要是通过遍历来实现
/** * @Description:找出list中的重复数据 * @param datas * @return */ public static <T> List<T> findRepeat(Collection<T> datas) { if (datas instanceof Set) { return new ArrayList<>(); } HashSet<T> set = new HashSet<T>(); List<T> repeatEles = new ArrayList<T>(); for (T t : datas) { if (set.contains(t)) { repeatEles.add(t); } else { set.add(t); } } return repeatEles; }
4.使用
public static void main(String[] args) { List<Integer> data = new ArrayList<>(Arrays.asList(new Integer[] { 1, 2, 1 })); System.out.println("Collection{1,2,1}中是否含有重复元素:"+isRepeatInCollection(data)); System.out.println("找出Collection{1,2,1}中的重复元素:"+findRepeat(data)); System.out.println("Collection{1,2,1}去重的结果是"+distinct(data));}//执行结果:Collection{1,2,1}中是否含有重复元素:true找出Collection{1,2,1}中的重复元素:[1]Collection{1,2,1}去重的结果是[1, 2]
在研发过程中,经常要用判断集合(Collection系)是否为空,下面提供工具方法,避免总写list!=null这样的代码
/** * @Description:判断所给集合是否为空 * @param * @param datas * @return true表示为空 */ public static <T> boolean isEmpty(Collection<T> datas) { return datas == null || datas.isEmpty(); }
CollectionUtils.isEmpty
集合判断:
例1: 判断集合是否为空: CollectionUtils.isEmpty(null): true CollectionUtils.isEmpty(new ArrayList()): true CollectionUtils.isEmpty({a,b}): false
例2: 判断集合是否不为空: CollectionUtils.isNotEmpty(null): false CollectionUtils.isNotEmpty(new ArrayList()): false CollectionUtils.isNotEmpty({a,b}): true
import org.springframework.util.CollectionUtils; import java.util.ArrayList;import java.util.List; public class Arraylist { public void st(){ List list=new ArrayList(); list.add("helloworld"); list.add("helloworld"); boolean flag = CollectionUtils.isEmpty(list); System.out.println(flag); //结果为false }}class p{ public static void main(String[] args) { new Arraylist().st(); }}