20

In Java 8, with the following class

 class Person {

    private boolean born;

    Person() {
    }

    public void setBornTrue() {
        born = true;
    }

    public void setBorn(boolean state) {
        born = state;
    }

  }

it is possible to call the setBornTrue method via a method reference:

    ArrayList<Person> people = new ArrayList<>();
    people.add(new Person());

    people.forEach(Person::setBornTrue);

but how would I use the forEach method and use the setBorn using a method reference? Trying:

    people.forEach(Person::setBorn);

results in an error, "Cannot resolve method setBorn".

In addition, how would I pass in the value of True?

Dakotah North
  • 1,324
  • 12
  • 29

1 Answers1

27

With lambda:

people.forEach((p) -> p.setBorn(true));

Found no other ways only using the java 8 API.


With this custom function:

public static <T, U> Consumer<T> bind2(BiConsumer<? super T, U> c, U arg2) {
    return (arg1) -> c.accept(arg1, arg2);
}

You can do:

people.forEach(bind2(Person::setBorn, true));

If this kind of utility methods is available in the java API or in a library, please let us know.

Volune
  • 4,324
  • 22
  • 23
  • Yes ... while the answer above is how to set this *without* a method reference, is there no way to code this *with* a method reference? – Dakotah North Aug 24 '14 at 05:31
  • @user465342 Updated with an alternative solution, which is not plain java, but uses a method reference. – Volune Aug 24 '14 at 05:47
  • Very impressive! Is there any reference you used to create that? Been looking for a good resource. – Dakotah North Aug 24 '14 at 06:36