import java.util.List;
import java.util.Optional;

class Ideone {
  public static void main(String[] args) {
    List<Pet> pets = List.of(new Dog(), new Cat());
    pets.stream().parallel()
        .forEach(Ideone::printSoundAndPet);
  }
  
  private static void printSoundAndPet(Pet pet) {
    final Optional<Pet> maybePet = Optional.ofNullable(pet);
    maybePet.ifPresent(Pet::sound);
    maybePet.map(Pet::toString)
        .ifPresent(System.out::println);
  }
}

interface Pet {
  void sound();
}

class Dog implements Pet {
  @Override
  public void sound() {
    System.out.println("Woof");
  }

  @Override
  public String toString() {
    return "Dog";
  }
}

class Cat implements Pet {
  @Override	
  public void sound() {
    System.out.println("Meow");
  }

  @Override
  public String toString() {
    return "Cat";
  }
}