2014-10-08 85 views
1

有没有什么方法可以动态地添加元素,例如lambda表达式中的for循环?动态添加到lambda表达式

我有当前的代码:

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) 

到lambda表达式取决于Li的大小的能力。因此,如果李的大小为3,则拉姆达应该有:

li.get(0).contains(filterField0.getText()) && 
li.get(1).contains(filterField1.getText()) && 
li.get(2).contains(filterField2.getText()) 

回答

4

假设你在列表中有你的filterField S,确保:

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))); 
+0

你只要让我很快乐,@James_D!祝你有个美好的一天。 – miniHessel 2014-10-08 14:18:14