list集合工具类 ListUtil 去重 差交并集

该博客介绍了如何使用Java进行集合操作,包括去重、获取交集、差集和并集。示例代码展示了如何利用ListUtil工具类实现这些功能,如通过distinct()方法实现集合去重,通过filter()和contains()获取交集和差集,以及如何控制并集是否去重。
摘要由CSDN通过智能技术生成
package com.bt.springboot.util;

import com.bt.springboot.entity.Person;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author zkx
 * @Date 2022/4/26 13:40
 */
public class ListUtil {

	public static void main(String[] args) {
		Person[] persons1 = {new Person("张三", 10),
				new Person("李四", 20),
				new Person("张三", 10),
				new Person("李四", 20)};

		Person[] persons2 = {new Person("张三", 10),
				new Person("李四", 20),
				new Person("王五", 30),
				new Person("赵六", 40)};
		List<Person> list1 = Arrays.asList(persons1);
		List<Person> list2 = Arrays.asList(persons2);

		// 1.集合去重
		System.out.println("------去重------");
		List<Person> newList = ListUtil.duplicateRem(list1);
		newList.forEach(System.out::println);

		// 2.集合取交集
		System.out.println("------交集------");
		List<Person> intersection = ListUtil.getIntersection(newList, list2);
		intersection.forEach(System.out::println);
		// 3.集合取差集
		System.out.println("------差集------");
		List<Person> difference = ListUtil.getDifference(list2, list1);
		difference.forEach(System.out::println);
		// 4.集合取并集
		System.out.println("------并集不去重------");
		List<Person> and = ListUtil.getAnd(list1, list2, false);
		and.forEach(System.out::println);
		// 5.集合取并集去重
		System.out.println("------并集去重------");
		List<Person> andRemDupl = ListUtil.getAnd(list1, list2, true);
		andRemDupl.forEach(System.out::println);

	}

	/**
	 * 集合去重
	 *
	 * @param list
	 * @return
	 */
	public static List<Person> duplicateRem(List<Person> list) {

		List<Person> newList = new ArrayList<>();
		list.forEach(obj -> {
			if (!newList.contains(obj)) {
				newList.add(obj);
			}
		});

		return newList;
	}

	/**
	 * 取两个集合交集
	 *
	 * @param list1
	 * @param list2
	 * @return
	 */
	public static List<Person> getIntersection(List<Person> list1, List<Person> list2) {
		return list1.stream().filter(list2::contains).collect(Collectors.toList());
	}

	/**
	 * 取两个集合差集
	 *
	 * @param list1
	 * @param list2
	 * @return
	 */
	public static List<Person> getDifference(List<Person> list1, List<Person> list2) {
		return list1.stream().filter(item -> !list2.contains(item)).collect(Collectors.toList());
	}

	/**
	 * 取两个集合并集
	 * @param list1
	 * @param list2
	 * @param remDupl
	 * @return
	 */
	public static List<Person> getAnd(List<Person> list1, List<Person> list2, boolean remDupl) {
		List<Person> listAll1 = list1.parallelStream().collect(Collectors.toList());
		List<Person> listAll2 = list2.parallelStream().collect(Collectors.toList());
		listAll1.addAll(listAll2);
		if (remDupl) {
			return listAll1.stream().distinct().collect(Collectors.toList());
		}
		return listAll1;
	}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值