Package org.apache.commons.collections4.functors

# Class WhileClosure<E>

java.lang.Object
org.apache.commons.collections4.functors.WhileClosure<E>

All Implemented Interfaces:
  `Consumer<E>`, `Closure<E>`

public class WhileClosure<E> extends Object implements Closure<E>
Closure implementation that executes a closure repeatedly until a condition is met, like a do-while or while loop.

WARNING: from v4.1 onwards this class will not be serializable anymore in order to prevent potential remote code execution exploits. Please refer to COLLECTIONS-580 for more details.

Since:
  3.0

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `WhileClosure(Predicate<? super E> predicate, Closure<? super E> closure, boolean doLoop)`
  Constructor that performs no validation.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `execute(E input)`
  Executes the closure until the predicate is false.
  `Closure<? super E>`
  `getClosure()`
  Gets the closure.
  `Predicate<? super E>`
  `getPredicate()`
  Gets the predicate in use.
  `boolean`
  `isDoLoop()`
  Is the loop a do-while loop.
  `static <E> Closure<E>`
  `whileClosure(Predicate<? super E> predicate, Closure<? super E> closure, boolean doLoop)`
  Factory method that performs validation.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface org.apache.commons.collections4.Closure

  `accept`

  ### Methods inherited from interface java.util.function.Consumer

  `andThen`

- ## Constructor Details

  - ### WhileClosure

    public WhileClosure(Predicate<? super E> predicate, Closure<? super E> closure, boolean doLoop)
    Constructor that performs no validation. Use `whileClosure` if you want that.
    Parameters:
      `predicate` - the predicate used to evaluate when the loop terminates, not null
      `closure` - the closure to execute, not null
      `doLoop` - true to act as a do-while loop, always executing the closure once

- ## Method Details

  - ### whileClosure

    public static <E> Closure<E> whileClosure(Predicate<? super E> predicate, Closure<? super E> closure, boolean doLoop)
    Factory method that performs validation.
    Type Parameters:
      `E` - the type that the closure acts on
    Parameters:
      `predicate` - the predicate used to evaluate when the loop terminates, not null
      `closure` - the closure to execute, not null
      `doLoop` - true to act as a do-while loop, always executing the closure once
    Returns:
      the `while` closure
    Throws:
      `NullPointerException` - if the predicate or closure is null

  - ### execute

    public void execute(E input)
    Executes the closure until the predicate is false.
    Specified by:
      `execute` in interface `Closure<E>`
    Parameters:
      `input` - the input object

  - ### getClosure

    public Closure<? super E> getClosure()
    Gets the closure.
    Returns:
      the closure
    Since:
      3.1

  - ### getPredicate

    public Predicate<? super E> getPredicate()
    Gets the predicate in use.
    Returns:
      the predicate
    Since:
      3.1

  - ### isDoLoop

    public boolean isDoLoop()
    Is the loop a do-while loop.
    Returns:
      true is do-while, false if while
    Since:
      3.1