java如何使用代码求两个list集合的差集呢?

Posted qq_25073223

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何使用代码求两个list集合的差集呢?相关的知识,希望对你有一定的参考价值。

转自:

java如何使用代码求两个list集合的差集呢?

下文笔者讲述求list集合的差集的方法简介说明,如下所示:

差集:
   用一个集合减去一个集合得到的集合,我们称之为“差集”
实现思路:
     使用stream流中的filter方法对集合
	  进行"不包含关系计算",从而得到差集(jdk8循环的新特性)

例:

package com.java265.other;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Test16 
	/**
	 * java265.com 示例程序
	 * 
	 * @throws IllegalAccessException
	 * @throws InstantiationException
	 */
	public static void main(String[] args) throws InstantiationException, IllegalAccessException 

		List<String> list1 = new ArrayList<String>();
		list1.add("java265.com-1");
		list1.add("java265.com-2");
		list1.add("java265.com-3");

		List<String> list2 = new ArrayList<String>();
		list2.add("java265.com-8");
		list2.add("java265.com-2");
		list2.add("java265.com-9");


		System.out.println("======================");
		// list1 差集
		list1 = list1.stream().filter(e -> 
			return !list2.contains(e);
		).collect(Collectors.toList());
		System.out.println(list1);
	


-----运行以上代码,将输出以下信息------
======================
[java265.com-1, java265.com-3]

求2个list的差集

我的list中的内容是一个实体类,主要有SKU(商品)、pay(支付方式)、receiveport(收货地址)三个字段,现在要求2个list的差集,要求把list2中出现的与list1完全相同的实体类从list1中去掉,判断完全相同的标准就是SKU、pay、receiveport三个字段
问题解决了
var NewList = (from t in lstAll
from g in lstHasDel
where t.SKU != g.SKU
select t
).ToList();
return NewList;

参考技术A 你好,写下思路:
1、将实体类的hashcode和equals方法重写;
2、遍历list2,判断每一个对象是否在list1中存在,存在的话,则remove.
这些都相当简单。你看还有什么疑问吗?追问

我想用linq方法,尽量不使用遍历。(我用的是C#)

追答

真不好意思,我收到了你的求助,还以为是java的呢,没学过C#,不过你按着思路用c#实现也是很容易的。你可以试一试。

以上是关于java如何使用代码求两个list集合的差集呢?的主要内容,如果未能解决你的问题,请参考以下文章

两个list求差集

arcgis怎么求差集

两个集合求对称差集

list的取差集

java求交集和并集

用java编写程序,求集合的并集、交集和差集