Java - Stream ForEach Operation

Introduction

The forEach operation takes an action for each element of the stream.

Stream<T> interface contains two methods to perform the forEach operation:

void forEach(Consumer<? super T> action)
void forEachOrdered(Consumer<? super T> action)

IntStream, LongStream, and DoubleStream have the same methods with different method signature.

forEach() method does not guarantee the order.

forEachOrdered() method performs the action in the encounter order of elements defined by the stream.

forEachOrdered() method may slow down a parallel stream.

The following code prints the details of females in the person list:

Demo

import java.time.LocalDate;
import java.time.Month;
import java.util.Arrays;
import java.util.List;

public class Main {
  public static void main(String[] args) {
    Person.persons().stream().filter(Person::isFemale).forEach(System.out::println);
  }/*ww w .  j av a 2s  .  c o m*/
}

class Person {
  // An enum to represent the gender of a person
  public static enum Gender {
    MALE, FEMALE
  }

  private long id;
  private String name;
  private Gender gender;
  private LocalDate dob;
  private double income;

  public Person(long id, String name, Gender gender, LocalDate dob, double income) {
    this.id = id;
    this.name = name;
    this.gender = gender;
    this.dob = dob;
    this.income = income;
  }

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public Gender getGender() {
    return gender;
  }

  public boolean isMale() {
    return this.gender == Gender.MALE;
  }

  public boolean isFemale() {
    return this.gender == Gender.FEMALE;
  }

  public void setGender(Gender gender) {
    this.gender = gender;
  }

  public LocalDate getDob() {
    return dob;
  }

  public void setDob(LocalDate dob) {
    this.dob = dob;
  }

  public double getIncome() {
    return income;
  }

  public void setIncome(double income) {
    this.income = income;
  }

  public static List<Person> persons() {
    Person ken = new Person(1, "Java", Gender.MALE, LocalDate.of(1970, Month.MAY, 4), 6020.0);
    Person jeff = new Person(2, "Jack", Gender.MALE, LocalDate.of(1970, Month.JULY, 15), 7320.0);
    Person donna = new Person(3, "Javascript", Gender.FEMALE, LocalDate.of(1972, Month.JULY, 29), 8720.0);
    Person chris = new Person(4, "XML", Gender.MALE, LocalDate.of(1993, Month.DECEMBER, 16), 5800.0);
    Person laynie = new Person(5, "Json", Gender.FEMALE, LocalDate.of(2002, Month.DECEMBER, 13), 0.0);
    Person lee = new Person(6, "Database", Gender.MALE, LocalDate.of(2011, Month.MAY, 9), 2400.0);

    // Create a list of persons
    List<Person> persons = Arrays.asList(ken, jeff, donna, chris, laynie, lee);

    return persons;
  }

  @Override
  public String toString() {
    String str = String.format("(%s, %s, %s, %s, %.2f)", id, name, gender, dob, income);
    return str;
  }
}

Result

Related Topics