Java 切换列表

标签 java data-structures

我需要一个包含“启用”过滤器的列表,例如:

[
{
    "enabled": false,
    "value": {
        "number": 0
    }
},
{
    "enabled": true,
    "value": {
        "number": 1
    }
},
{
    "enabled": false,
    "value": {
        "number": 2
    }
},
{
    "enabled": true,
    "value": {
        "number": 3
    }
}
]

如果我要迭代此列表,使用 Iterable.iterator() 打印每个“数字”或带有 get(i) 的标准 for 循环,它会输出:

1, 3

它的 size() 将返回 2。但是如果我继续启用第一个元素,它将打印:

0, 1, 3

它的 size() 将返回 3。

有类似这样的标准实现吗?

该列表将具有对其未过滤版本进行操作的功能,以便能够实际切换每个元素。

最佳答案

我认为最简单的方法是自定义集合,它只需跳过元素到下一个启用元素

public interface Enabled
{
    public boolean isEnabled();
}

public class EnabledCollection<T extends Enabled> implements List<T>
{
    private List<T> list = new ArrayList<T>();

    @Override
    public Iterator<T> iterator() {        
        Iterator<T> it = new Iterator<T>() {

            private int i = 0;

            @Override
            public boolean hasNext() {
                return i < list.size();
            }

            @Override
            public T next() {
                T o = list.get(++i);

                while (!o.isEnabled() && hasNext()) { o = list.get(++i); }

                return o;
            }

            @Override
            public void remove() {
                // todo
            }
        };

        return it;
    }

    @Override
    public T get(int i)
    {
        T o = list.get(i);

        while (!o.isEnabled() && i < list.size()) { o = list.get(++i); }

        return o;
    }

    // etc
}

关于Java 切换列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17493782/

相关文章:

java - 无法打开超链接文件 Apache POI

java - @DateTimeFormat 转换为 JSON 格式错误

Java 持久性 : Design with it in mind from the beginning or add in later?

java - 检查字符串中的特殊符号

java - 复杂数据结构: simplicity vs transparency

java - 使用 ResultSet 渲染数据时出错

java - 有没有类似于队列的数据结构,可以对不同的线程进行多播?

c++ - 在 C++ 中,如何在没有 pop() 函数的情况下返回堆栈的第二个元素?

json - 来自 Postgres 的 Golang 中的嵌套 JSON 结果

data-structures - 是否有 `Entry`的 `BTreeMap`机制允许返回不可变的引用?