实际项目开发中,很多业务场景下都会遇见集合去重。在说到目录集合去重之前,首先我们回顾下普通类型的目录如何去重
1 常规去重
碰到目录去重的问题,除了遍历去重,我们常常想到利用一组集合不允许重复元素的特点,通过目录和一组互转,来去掉重复元素。
//遍历后判断赋给另一个目录集合,保持原来顺序
公共静态void rid重复1(ListString列表){
系统。出去。println(' list=[' list ']');
ListString list new=new ArrayList string();
for (String str : list) {
如果(!listNew.contains(str)) {
列出新的。add(str);
}
}
系统。出去。println(' list new=[' list new ']');
}
//设置集合去重,保持原来顺序
public static void rid repeat 2(ListString list){
系统。出去。println(' list=[' list ']');
ListString list new=new ArrayList string();
set set=new HashSet();
for (String str : list) {
if (set.add(str)) {
列出新的。add(str);
}
}
系统。出去。println(' list new=[' list new ']');
}
//设置去重由于集合(哈希集)的无序性,不会保持原来顺序
公共静态void rid重复3(ListString列表){
系统。出去。println(' list=[' list ']');
set set=new HashSet();
ListString list new=new ArrayList string();
设置。addall(列表);
列出新的。addall(集合);
系统。出去。println(' list new=[' list new ']');
}
//设置通过哈希特去重(将ridRepeat3方法缩减为一行)无序
公共静态void rid重复4(ListString列表){
系统。出去。println(' list=[' list ']');
ListString list new=new ArrayList string(new HashSet(list));
系统。出去。println(' list new=[' list new ']');
}
//设置通过树集去重会按字典顺序重排序
public static void rid repeat 5(ListString list){
系统。出去。println(' list=[' list ']');
ListString list new=new ArrayList string(new TreeSetString(list));
系统。出去。println(' list new=[' list new ']');
}
//设置通过LinkedHashSet去重保持原来顺序
公共静态void rid重复6(ListString列表){
系统。出去。println(' list=[' list ']');
ListString list new=new ArrayList string(new LinkedHashSetString(list));
系统。出去。println(' list new=[' list new ']');
}
stream去重
//利用java8的溪流去重
List uniqueList=list.stream().独特()。收藏(收藏者。to list());
系统。出去。println(uniquelist。tostring());
上面的方法在目录元素为基本数据类型及线类型时是可以的,但是如果目录集合元素为对象,却失效了!
2 对象去重
可利用为循环遍历的方式进行判断去重,很简单不赘述,看如下方法:
2.1 stream去重
//根据名字属性去重
ListUser唯一名称list=userList。流()。收集(收集然后(
toCollection(() -新树集(比较(User:getName))、ArrayList:new)
);
System.out.println('根据名字去重后集合元素:'唯一名称列表。tostring());
//根据姓名,年龄属性去重
ListUser uniqueNameAndAgeList=userList。流()。收集(收集然后(
toCollection(() -新树集(比较(o-o . getname()';'o.getAge()))),ArrayList:new)
);
System.out.println('根据姓名,年龄去重后集合元素:' uniquenameandagelist。tostring());
输出结果:
重写equals()、hashCode()
//重写等于方法
@覆盖
公共布尔等于(对象对象){
用户用户=(用户obj
返回名称。等于(用户。getname())(年龄==用户。getage());
}
//重写哈希码方法
@覆盖
public int hashCode() {
字符串str=姓名年龄;
返回海峡。hashcode();
}
关于Java对列表集重复数据删除方案的详细介绍,本文到此结束。有关更多相关的Java列表集重复数据删除内容,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。