Skip to main content

Java 8 - Optional - Introduction

  • The optional data type is useful for representing an object which can have a null value.
  • It prevents null pointer exceptions and also provides useful operations on the object.

public abstract class IntroductionToOptionals {

    * let's assume we are having a party, and the party could have a DJ, MC and Usher
    * It's best to represent them as optional as their presence at the party is really optional
   * */
   Optional dj = Optional.of(new Person("DJ", "JimmyJack"));
   Optional mc = Optional.of(new Person("MC", "Hammer"));
   Optional usher = Optional.of(new Person("Usher", "Ray"));

    * assuming there could be a second Usher who we can bet won't attend, we can set such
    * usher to an empty option
   Optional usher_2 = Optional.empty();

    * assuming also that two acquaintances may attend the party, but we can't remember their names,
    * we can reserve spaces for them using Optional.ofNullable
    * This is the equivalent of saying: create an empty option if I don't remember this person,
    * otherwise create an option of the person

   Optional acquaintance_1 = Optional.ofNullable(null);
   Optional acquaintance_2 = Optional.ofNullable(new Person("Acquaintance", "Tom"));


Popular posts from this blog

Java 8 - Streams - Introduction

Streams provide extended  functionality  to collections.  All collection operations except operations on Map can be extended using streams. Streams can either be sequential or parallel . Operations on sequential streams are performed on a single thread. Operations on parallel streams are performed concurrently on multiple threads, and so are faster than sequential streams (although item order is affected). NOTE that parallel streams are CPU intensive and should be used with care as it can lead to starvation of other processes in your application. Operations on streams are grouped into intermediate ( transformations ) and terminal ( actions ). Stream processing is triggered only by terminal operations, while intermediate operations return a new stream. an empty stream Stream emptyStream = Stream.empty(); creating a stream from array Stream<Integer> streamFromArray = Stream.of(new Integer[]{1,2,3}); Stream<Integer> streamFromArray2 = In

Java 8 - Streams - Parallel Stream

Operations on parallel streams are performed concurrently on multiple threads and so are faster than sequential streams (although item order is affected) However, operations on parallel streams can be ordered using ' stream.forEachOrdered ' parallel Integer Stream Stream<Integer> parallelIntegerStream = new ArrayList<>(Arrays.asList(1,2,3)).parallelStream(); another parallel Integer Stream Stream<Integer> parallelIntegerStream2 = IntStream.range(0, 10).parallel().boxed();  parallel String Stream Stream<String> parallelStringStream = Arrays.asList("ab","acd","db","dab","ea").parallelStream(); USAGE 1 Consumer<Stream> orderedParallelStreamConsumer = stream -> stream.forEachOrdered(item ->; orderedParallelStreamConsumer.accept(parallelIntegerStream); orderedParallelStreamConsumer.accept(parallelIntegerStream2); USAGE 2 Consumer&

Java 8 - Streams - Actions - Reduce

reduce operation on stream provides a way to accumulate the result of an operation which traverses all items in the stream. The traversal starts from the leftmost item in the stream. There are three implementations of the reduce operation. The first implementation uses the first item in the stream as initial accumulator. The second implementation expects an initial accumulator input. The third implementation provides a way to return an accumulator which has a different type from the stream items. This is similar to foldLeft in other functional languages e.g. Scala. int stream one to three IntStream oneToThree = IntStream.of(1, 2, 3); int stream one to two IntStream oneToTwo = IntStream.of(1, 2); string stream Stream stringStream = Stream.of("a", "ab", "abc", "abcd"); USAGE"first implementation - reducing oneToThree Integer stream by addition: " + oneToThree.reduce((acc, ite