Вот пример код:Как связывать списки как обновление ForEach?
public class Example3 {
class Point {
int x, y; // these can be properties if it matters
}
class PointRepresentation {
Point point; // this can be a property if it matters
public PointRepresentation(Point point) {
this.point = point;
}
}
Example3() {
ObservableList<Point> points = FXCollections.observableArrayList();
ObservableList<PointRepresentation> representations = FXCollections.observableArrayList();
points.forEach(point -> representations.add(new PointRepresentation(point)));
}
}
У меня есть держатель Point
данных и представляемых PointRepresentation
данных. У меня есть список точек, и мне бы хотелось, чтобы для каждой точки в списке был бы эквивалентный объект представления во втором списке. Код, который я дал для инициализации, но если есть какие-либо изменения позже, это не будет обновляться.
Теперь я использую прослушиватель изменений для синхронизации списков (добавление и удаление элементов на основе объекта изменения), и все в порядке, но мне интересно, есть ли более простое решение. Я искал что-то вроде «для каждой привязки», что означает: для каждого элемента в одном списке есть один в другом с указанным отношением между ними [в моем случае это его конструктор]. В псевдокоде:
representations.bindForEach(points, point -> new PointRepresentation(point));
Что я Смотрела: экстракторы для списка, но который отправляет обновления, когда имущество в объектах они держат изменения и не тогда, когда сам список изменений. Так что в моем случае, если x
в изменениях точки я могу сделать извлечения, который уведомляет об этом. Еще одна вещь, на которую я смотрел, - http://docs.oracle.com/javase/8/javafx/api/javafx/beans/binding/ListBinding.html, так что, возможно, пользовательская привязка делает это, но я не знаю, проще ли это.
Также есть аналогичное решение для массивов вместо списков? я видел как можно скорее http://docs.oracle.com/javase/8/javafx/api/javafx/collections/ObservableArray.html.
'LiveList.map' выглядит точно так же, как я имел в виду с' bindForEach'. Великий. Есть ли что-то подобное для массивов? – Mark
@Mark Я не верю, что что-то похожее на массивы. Вы все равно не можете «добавить» или «удалить» из массива. –
ОК. Я смотрел на [ObservableArray] (https://docs.oracle.com/javase/8/javafx/api/toc.htm). Это кажется очень неразвитым. Поддерживается только 2 примитива и независимо от того, что «Лицо» копирует javadoc Integer. – Mark