我可以基于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()
检查高效。调用.contains()
aList
是线性时间操作,这意味着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操作。“重叠” ID是两组ID的交集,而“缺失” ID是差异。
番石榴在其实用程序中提供了这些操作的有效实现Sets
。(union
,intersection
,difference
,和complementOf
)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句