package bluej.utility.javafx.binding;

import java.util.function.Function;
import java.util.stream.Stream;

import javafx.collections.ObservableList;


| Binds a destination list to the concatenation of some observable-list accessor | on items in an observable list. | public class ConcatMapListBinding<DEST, SRC> extends DeepListBinding<DEST>{ private final ObservableList<SRC> src; private final Function<SRC, ObservableList<? extends DEST>> via; public static void bind(ObservableList<DEST> dest, ObservableList<SRC> src, Function<SRC, ObservableList<? extends DEST>> via) { new ConcatMapListBinding<>(dest, src, via).startListening(); } private ConcatMapListBinding(ObservableList<DEST> dest, ObservableList<SRC> src, Function<SRC, ObservableList<? extends DEST>> via) { super(dest); this.src = src; this.via = via; } @Override protected Stream> getListenTargets() { return Stream.concat(Stream.of((ObservableList<?>)src), src.stream().map(via)); } @Override protected Stream calculateValues() { return src.stream().map(via).flatMap(ObservableList::stream); } }

.   bind
.   ConcatMapListBinding
.   getListenTargets
.   calculateValues




43 neLoCode + 2 LoComm