我需要一个包含“启用”过滤器的列表,例如:
[
{
"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/