获取两个list交集

该方法使用Java8的StreamAPI,通过filter操作符过滤sourceList中的元素,检查它们是否包含在targetList中,然后使用Collectors.toList()收集结果,返回相同的字符串列表。
	/**
	 * @Description: 获取两个list中相同项
	 * @param sourceList
	 * @param targetList
	 * @return: List<String>
	 */
	public static List<String> getSameList(List<String> sourceList, List<String> targetList)
	{
		return sourceList.stream().filter(targetList::contains).collect(Collectors.toList());
	}
### 获取两个 List交集方法 #### Java 中的实现方式 在 Java 中,可以通过 `retainAll()` 方法获取两个列表的交集。这个方法会保留当前列表中与目标列表相同的元素,即最终结果是两者的交集。 ```java import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<String> list1 = new ArrayList<>(); list1.add("A"); list1.add("B"); List<String> list2 = new ArrayList<>(); list2.add("B"); list2.add("C"); // 保留 list1 和 list2 的交集 list1.retainAll(list2); System.out.println("交集: " + list1); // 输出 [B] } } ``` 需要注意的是,`retainAll()` 方法会直接修改原始列表的内容[^1]。 如果希望不改变原始列表,并且使用更现代的方式(如 Java 8 及以上版本),可以结合 `Stream` API 和 `filter` 操作来实现: ```java import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<String> list1 = List.of("A", "B"); List<String> list2 = List.of("B", "C"); // 使用 Stream API 获取交集 List<String> intersection = list1.stream() .filter(list2::contains) .collect(Collectors.toList()); System.out.println("交集: " + intersection); // 输出 [B] } } ``` 这种方式不会修改原始列表,而是生成一个新的列表作为结果[^3]。 #### Python 中的实现方式 在 Python 中,有多种方式可以获取两个列表的交集。以下是两种常见的实现方法: **1. 列表推导式** 通过遍历一个列表,并检查元素是否存在于另一个列表中,可以快速获取交集: ```python a = [2, 3, 4, 5] b = [2, 5, 8] # 使用列表推导式获取交集 intersection = [val for val in a if val in b] print(intersection) # 输出 [2, 5] ``` 这种方法简单易懂,适合小规模数据处理[^2]。 **2. 使用合操作** 将列表转换为合后,可以利用合的内置方法 `intersection()` 快速计算交集: ```python a = [2, 3, 4, 5] b = [2, 5, 8] # 使用获取交集 intersection = list(set(a).intersection(set(b))) print(intersection) # 输出 [2, 5] ``` 此方法效率更高,尤其是当数据量较大时,推荐使用该方式[^2]。 --- ### 总结 - **Java**:可以通过 `retainAll()` 或 `Stream` API 实现交集。 - **Python**:可以使用列表推导式或合运算符(如 `intersection()`)实现交集。 每种方法都有其适用场景,具体选择取决于需求以及对性能的要求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值