动态添加到lambda表达式

时间:2014-10-08 13:59:06

标签: java lambda javafx

有没有办法动态添加元素,例如在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()) 

1 个答案:

答案 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)));