gpt4 book ai didi

Java:自动过滤列表?

转载 作者:太空宇宙 更新时间:2023-11-04 08:52:50 24 4
gpt4 key购买 nike

我收到了一系列项目,这些项目在我的一个数据结构中使用,我需要一种方法来跟踪保留的这些项目。

interface Item {}
class Foo implements Item { ... }
class Baz implements Item { ... }

class StateManager
{
List<Foo> fooList;
Map<Integer, Baz> bazMap;

public List<Item> getItems();
}

我想要的是,如果我执行以下操作:

for (int i = 0; i < SOME_LARGE_NUMBER; ++i)
{
/* randomly do one of the following:
* 1) put a new Foo somewhere in the fooList
* 2) delete one or more members from the fooList
* 3) put a new Baz somewhere in the bazMap
* 4) delete one or more members from the bazMap
*/
}

然后,如果我调用 StateManager.getItems(),我想返回 Foo 和 Baz 项的列表,这些项按添加顺序在 fooList 和 bazMap 中找到。从 fooList 和 bazMap 中删除或替换的项目不应出现在返回的列表中。

我该如何实现这个? SOME_LARGE_NUMBER 足够大,以至于我没有足够的内存来保留所有 Foo 和 Baz 项目,然后过滤它们。

<小时/>

编辑:这对我来说似乎很难,因为我真的不希望 Foo 类或 Baz 类了解插入索引,并且我希望该方法是可扩展的,这样我也不必让 StateManager 意识到它。

我正在考虑是否可以对 fooList 和 bazMap 中使用的 List<> 和 Map<> 使用装饰器,每个装饰器都引用 getItems() 返回的主 List<>,这样装饰器就会默默地完成所有的工作。

同样为了清楚起见,我们假设 fooList 和 bazMap 上的操作是:

 fooList.add(foo1);
bazMap.put(3, baz1);
fooList.add(foo2);
fooList.add(foo3);
bazMap.put(10, baz2);
bazMap.put(4, baz3);
fooList.set(1, foo4);
bazMap.put(7, baz4);
bazMap.put(3, baz5);
fooList.add(foo5);
bazMap.put(7, baz6);
fooList.set(0, foo6);
bazMap.put(4, baz7);
fooList.add(foo1);

那么 getItems 返回的列表应该是

 [foo3, baz2, foo4, baz5, foo5, baz6, foo6, baz7, foo1]

因为最后 fooList = [foo6, foo4, foo3, foo5, foo1] 和最终 bazMap = {10: baz2, 4: baz7, 3: baz5, 7: baz6}。项目 foo1、baz1、foo2、baz3 和 baz4 全部被替换(foo1 在最后一步添加回来)

最佳答案

我也不明白到底在寻求什么。如果问题是维护 Foos 和 Bars 的插入顺序,那么您可以存储它们的索引(i 在循环中),并根据该索引对它们进行排序,通过对列表进行排序或通过 TreeMap 或其他方式。另一种选择是使用 LinkedHashMap(再次使用键索引)来维护插入顺序。

关于Java:自动过滤列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2966715/

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