java如何使用代码求两个list集合的差集呢?
Posted qq_25073223
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
1、将实体类的hashcode和equals方法重写;
2、遍历list2,判断每一个对象是否在list1中存在,存在的话,则remove.
这些都相当简单。你看还有什么疑问吗?追问
我想用linq方法,尽量不使用遍历。(我用的是C#)
追答真不好意思,我收到了你的求助,还以为是java的呢,没学过C#,不过你按着思路用c#实现也是很容易的。你可以试一试。
以上是关于java如何使用代码求两个list集合的差集呢?的主要内容,如果未能解决你的问题,请参考以下文章