gpt4 book ai didi

Java 8 流如何过滤在另一个 arrayList 中找不到的列表的内容?

转载 作者:搜寻专家 更新时间:2023-11-01 04:02:38 25 4
gpt4 key购买 nike

我可以根据在 Java 8 中的另一个数组列表中找到的元素来过滤数组列表吗?整个故事是我从 oracle 电子商务套件应用程序中获取了活跃员工的列表

**EmpID**
00123
003456
023299

我有一个单独的文件,其中包含文件名为 EmpID.jpeg

的照片
**FileName**
00123.jpeg
003456.jpeg
023299.jpeg

现在我的目的是比较列表并过滤向我提供照片和未提供照片的员工。

private ArrayList<String> _IDsFromFile;
private ArrayList<String> _IDsFromImage;

---
---

public void compareAndCopy(String fileName){

}

最佳答案

首先,您应该将这些列表中的一个或另一个转换为 Set ,所以 .contains()检查是有效的。在 List 上调用 .contains() 是线性时间操作,这意味着这样做 n 次是二次的。

一旦完成,就可以直接使用 .filter()甚至 .partitioningBy()以确定两个列表重叠的位置。

Set<String> imageIdsSet = new HashSet<>(IDsFromImage);

List<String> overlappingIds = IDsFromFile.stream()
.filter(imageIdsSet::contains)
.collect(toList());

// OR

Map<Boolean, List<String>> partitionedIds = IDsFromFile.stream()
.collect(partitioningBy(imageIdsSet::contains));
List<String> overlappingIds = partitionedIds.get(true);
List<String> missingIds = partitionedIds.get(false);

原则上,您所描述的是 set operations . “重叠”ID 是两组 ID 的交集,而“缺失”ID 是差异

Guava在其 Sets 中提供了这些操作的有效实现效用。 ( unionintersectiondifferencecomplementOf )。

关于Java 8 流如何过滤在另一个 arrayList 中找不到的列表的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42730691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com