
shz.core.node.DNode Maven / Gradle / Ivy
package shz.core.node;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
/**
* 双向链表节点
*/
@SuppressWarnings("unchecked")
public interface DNode> {
T next();
void next(T node);
T prev();
void prev(T node);
default T addNext(T node) {
node.prev((T) this);
node.next(next());
next().prev(node);
next(node);
return node;
}
default T addPrev(T node) {
node.prev(prev());
node.next((T) this);
prev().next(node);
prev(node);
return node;
}
default void poll() {
if (prev() != null) prev().next(next());
if (next() != null) next().prev(prev());
prev(null);
next(null);
}
default T findNext(Predicate predicate) {
if (predicate == null) return null;
for (T next = (T) this; next != null; next = next.next()) if (predicate.test(next)) return next;
return null;
}
default T findPrev(Predicate predicate) {
if (predicate == null) return null;
for (T prev = (T) this; prev != null; prev = prev.prev()) if (predicate.test(prev)) return prev;
return null;
}
default void forEachNext(Function func) {
if (func == null) return;
for (T next = (T) this; next != null; next = next.next()) {
Boolean stop = func.apply(next);
if (stop != null && stop) break;
}
}
default void forEachPrev(Function func) {
if (func == null) return;
for (T prev = (T) this; prev != null; prev = prev.prev()) {
Boolean stop = func.apply(prev);
if (stop != null && stop) break;
}
}
default void forEachNext(Consumer consumer) {
if (consumer == null) return;
for (T next = (T) this; next != null; next = next.next()) consumer.accept(next);
}
default void forEachPrev(Consumer consumer) {
if (consumer == null) return;
for (T prev = (T) this; prev != null; prev = prev.prev()) consumer.accept(prev);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy