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