java list 去重 相同的相加_List集合常规去重与java8新特性去重方法

一、常规去重

碰到List去重的问题,除了遍历去重,我们常常想到利用Set集合不允许重复元素的特点,通过List和Set互转,来去掉重复元素。

//遍历后判断赋给另一个list集合,保持原来顺序

public static void ridRepeat1(Listlist) {

System.out.println("list = [" + list + "]");

List listNew = new ArrayList();for(String str : list) {if (!listNew.contains(str)) {

listNew.add(str);

}

}

System.out.println("listNew = [" + listNew + "]");

}//set集合去重,保持原来顺序

public static void ridRepeat2(Listlist) {

System.out.println("list = [" + list + "]");

List listNew = new ArrayList();

Set set= newHashSet();for(String str : list) {if(set.add(str)) {

listNew.add(str);

}

}

System.out.println("listNew = [" + listNew + "]");

}//Set去重 由于Set的无序性,不会保持原来顺序

public static void ridRepeat3(Listlist) {

System.out.println("list = [" + list + "]");

Set set= newHashSet();

List listNew = new ArrayList();

set.addAll(list);

listNew.addAll(set);

System.out.println("listNew = [" + listNew + "]");

}//Set去重(将ridRepeat3方法缩减为一行) 无序

public static void ridRepeat4(Listlist) {

System.out.println("list = [" + list + "]");

List listNew = new ArrayList(newHashSet(list));

System.out.println("listNew = [" + listNew + "]");

}//Set去重并保持原先顺序

public static void ridRepeat5(Listlist) {

System.out.println("list = [" + list + "]");

List listNew2= new ArrayList(new LinkedHashSet(list));

System.out.println("listNew = [" + listNew + "]");

}

二、java8的stream写法实现去重

1、distinct去重

//利用java8的stream去重

List uniqueList =list.stream().distinct().collect(Collectors.toList());

System.out.println(uniqueList.toString());

distinct()方法默认是按照父类Object的equals与hashCode工作的。所以:

上面的方法在List元素为基本数据类型及String类型时是可以的,但是如果List集合元素为对象,却不会奏效。不过如果你的实体类对象使用了目前广泛使用的lombok插件相关注解如:@Data,那么就会自动帮你重写了equals与hashcode方法,当然如果你的需求是根据某几个核心字段属性判断去重,那么你就要在该类中自定义重写equals与hashcode方法了。

2、也可以通过新特性简写方式实现

不过该方式不能保持原列表顺序而是使用了TreeSet按照字典顺序排序后的列表,如果需求不需要按原顺序则可直接使用。

//根据name属性去重

List lt =list.stream().collect(

collectingAndThen(

toCollection(()-> new TreeSet<>(Comparator.comparing(User::getName))), ArrayList:

你可能感兴趣的:(java,list,去重,相同的相加)