
com.bigcustard.util.WatchableList Maven / Gradle / Ivy
package com.bigcustard.util;
import com.badlogic.gdx.utils.Disposable;
import com.bigcustard.scene2dplus.resource.Resource;
import com.google.common.collect.Lists;
import java.util.Iterator;
import java.util.List;
import java.util.Spliterator;
import java.util.function.Consumer;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
public class WatchableList implements Iterable, Disposable {
private final List list;
private WatchableValue add = new WatchableValue<>(null);
private WatchableValue remove = new WatchableValue<>(null);
public WatchableList(List list) {
this.list = Lists.newArrayList(list);
}
public boolean add(E e) {
list.add(0, e);
add.broadcast(e);
return true;
}
public boolean remove(E e) {
boolean result = list.remove(e);
remove.broadcast(e);
return result;
}
public void watchAdd(Consumer watcher) {
add.watch(watcher);
}
public void watchRemove(Consumer watcher) {
remove.watch(watcher);
}
public void watchChange(Consumer watcher) {
remove.watch(watcher);
add.watch(watcher);
}
@Override
public Iterator iterator() {
return list.iterator();
}
@Override
public void forEach(Consumer super E> action) {
list.forEach(action);
}
@Override
public Spliterator spliterator() {
return list.spliterator();
}
public Stream stream() {
return StreamSupport.stream(spliterator(), false);
}
@Override
public void dispose() {
add.dispose();
remove.dispose();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy