gpt4 book ai didi

java - 将项目列表分为新项目、现有项目和已完成的现有项目

转载 作者:行者123 更新时间:2023-12-01 19:59:54 26 4
gpt4 key购买 nike

我的数据库中有一个我想要的项目列表。有些项目是新的,必须保存,其他项目已经在数据库中,但必须更新,其中一些需要更新的项目可能有资格获得特殊处理。

现在我只是运行它们并根据它们的属性将它们放入其他列表中,然后将列表交给处理它的相应数据库(或特殊)方法。

我只是觉得它不太漂亮,它做得有点多,而且有嵌套的 if。但实在想不出更好的方法来做到这一点。

这是(稍微简化的)代码

List<Item> newItemList = new ArrayList<>();
List<Item> existingItemList = new ArrayList<>();
List<Item> specialItemList = new ArrayList<>();

for(Item item : items)
{
if(item.isNew())
{
newItemList.add(item);
}
else
{
if(item.isSpecial())
{
specialItemList.add(item);
}
existingItemList.add(item);
}
}

itemHandler.saveItems(newItemList);
itemHandler.updateItems(existingItemList);
specialManager.specialStuff(specialItemList);

最佳答案

您当前的代码完全符合要求。您的要求需要三个不同的列表,并且您需要迭代一次项目来创建它们。这是最有效的方法。您可以用三行编写代码 - 见下文 - (辅助方法是为了清晰起见) - 但随后您迭代项目三次(但不需要 3 个列表)。我相信任何使代码变得“更好”的尝试都会失去一些优化。

itemHandler.saveItems(createList(items, i -> i.isNew()));
specialManager.specialStuff(createList(items, i -> !i.isNew() && i.isSpecial()));
itemHandler.updateItems(createList(items, i -> !i.isNew()));

辅助方法:

public List<Item> createList(List<Item> allItems, Predicate<Item> p) {
return allItems.stream().filter(p).collect(Collectors.toList());
}

关于java - 将项目列表分为新项目、现有项目和已完成的现有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48406250/

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