gpt4 book ai didi

java - 如何在 Java 中检查不同对象的两个数组列表中是否缺少元素?

转载 作者:行者123 更新时间:2023-11-30 06:40:06 24 4
gpt4 key购买 nike

我有两个具有不同属性的类,只有一个具有共同的属性。我想比较两者并提取缺少元素的列表。因此,例如,我们有以下类,其中 inventoryId 和 id 相同,这些是我们要查找的元素,如果它们在药物列表中丢失的话。

public class DrugInventory {
String inventoryId;
String drugStatus;
}

public class Drug{
String id;
String name;
String quantity;
}
DrugInventory 中的

inventoryID 等于 Drug 中的 id。因此,如果药物 list 中缺少这两个值,我将查找它们。

List<DrugInventory> drugInventories = new ArrayList<>();

DrugInventory drugInventory = new DrugInventory("121212");
DrugInventory drugInventory1 = new DrugInventory("232323");
DrugInventory drugInventory2 = new DrugInventory("343434");
DrugInventory drugInventory3 = new DrugInventory("454545");
DrugInventory drugInventory4 = new DrugInventory("565656");

drugInventories.add(drugInventory);
drugInventories.add(drugInventory1);
drugInventories.add(drugInventory2);
drugInventories.add(drugInventory3);
drugInventories.add(drugInventory4);

List<Drug> drugs = new ArrayList<>();

Drug drug = new Drug("121212");
Drug drug1 = new Drug("232323");
Drug drug2 = new Drug("343434");

drugs.add(drug);
drugs.add(drug1);
drugs.add(drug2);

此处的预期结果应该等于如下所示的列表:

 [DrugInventory(inventoryId=454545, drugStatus=null), DrugInventory(inventoryId=565656, drugStatus=null)]

我可以在这里使用嵌套循环来比较每个元素,但那样效率很低。我怎样才能有效地做到这一点?

最佳答案

具体查找库存中药品 list 中不存在的药品的问题,可以使用:

public static List<DrugInventory> findMissingDrugs(List<Drug> drugs, 
List<DrugInventory> inventory) {
Set<String> drugIdLookup = drugs.stream()
.map(d -> d.id)
.collect(Collectors.toCollection(HashSet::new));
return inventory.stream()
.filter(i->!drugIdLookup.contains(i.inventoryId))
.collect(Collectors.toList());
}

首先,我们只将 ID 拉入 HashSet(HashSet 提供 O(1) 查找时间复杂度),然后我们从库存中收集所有不在该查找集。如果您有需要使用多个键的更复杂的查找,那么关于将两者重组为 ID 是键的 HashMap 的另一个答案是一种更好的长期方法。

关于java - 如何在 Java 中检查不同对象的两个数组列表中是否缺少元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58960089/

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