How do I write a new ListChangeListener<Item>() with lambda?

20,673

Since ObservableList inherits addListener(InvalidationListener) from the Observable interface, the compiler is unable to determine which version to call. Specifying the type of the lambda through a cast should fix this.

listItems.addListener((ListChangeListener)(c -> {/* ... */}));

You can also explicitly specify the type of c:

listItems.addListener((ListChangeListener.Change<? extends Item> c) -> {/* ... */});
Share:
20,673

Related videos on Youtube

simonides
Author by

simonides

Updated on November 05, 2020

Comments

  • simonides
    simonides about 3 years

    How do I write a new ListChangeListener() with lambda in java8?

    listItems.addListener(new ListChangeListener<Item>() {
        @Override
        public void onChanged(
            javafx.collections.ListChangeListener.Change<? extends Item> c) {
            // TODO Auto-generated method stub
        }
    });
    

    This is what I tried:

    listItems.addListener(c->{});
    

    But eclipse states:

    The method addListener(ListChangeListener) is ambiguous for the type ObservableList.

    The List is declared as:

    ObservableList<Item> listItems = FXCollections.observableArrayList();
    
  • simonides
    simonides over 9 years
    searchResultListItems.addListener((ListChangeListener.Change‌​<? extends Contact> c) ->{}); did the trick thx for the hint
  • ktul
    ktul over 6 years
    Your solution works for ListViews, but the question was about ObservableLists, which do not have a focusedProperty.
  • Lealo
    Lealo over 6 years
    Cannot do the above option with ChangeListener. Using PropertyListeners... "Lambda expression`s signiture do not match the signature of the functional interface method changed(ObservableValue, Object, Object)". - When trying to: property.addListener((ChangeListener) e -> ({/* ... */}));