有没有办法动态添加元素,例如在lambda表达式中使用for循环?
我有当前的代码:
FilteredList<List<String>> filteredItems = new FilteredList(data, e -> true);
filteredItems.predicateProperty().bind(
Bindings.createObjectBinding(()
-> li -> li.get(0).contains(filterField.getText()) && li.get(1).contains(filterField2.getText()), filterField.textProperty(), filterField2.textProperty()
)
);
我希望能够添加
li.get(x).contains(filterFieldX)
取决于li的大小的lambda表达式。因此,如果li的大小为3,那么lambda应该具有:
li.get(0).contains(filterField0.getText()) &&
li.get(1).contains(filterField1.getText()) &&
li.get(2).contains(filterField2.getText())
答案 0 :(得分:4)
假设您在列表中有filterField
个,请确保:
filteredItems.predicateProperty().bind(
Bindings.createObjectBinding(()
-> li -> {
for (int i=0; i<li.size(); i++) {
if (! li.get(i).contains(filterFieldList.get(i).getText())) {
return false ;
}
}
return true ;
},
filterFieldList.stream().map(TextField::textProperty)
.toArray(StringProperty[]::new)));