You are here
Home > java > Core Java >

Java 8 Coding Interview Questions

Java 8 Coding Interview QuestionsIn this article, We will discuss about Java 8 Coding Interview Questions and their Answers. Moreover, we will try to provide multiple approaches to solve a coding problem. Additionally, related concepts to a particular coding problem will also be discussed. Our primary focus of this article is to provide all important Java 8 Coding Interview Questions and their Answers. However, for theoretical questions & answers of Java 8 Interview, kindly visit our other article ‘Java 8 Concept Based Interview Questions & Answers.

Java 8 Coding Interview Questions

In the subsequent sections of this article, we will discuss the important coding questions using Java 8 or higher versions. If you want to go through detailed tutorial on Java 8 Features, you may visit Concepts Tutorial on Java 8 Features.

You may also check Quizzes/MCQs on Java & related framework at Java Practice Test & Interview Questions .

How to iterate and modify values in a Map using Java 8?

Here is the program to update & iterate a Map in Java 8.

public class MapUpdateTest {

       public static void main(String[] args) {

              Map<String,String> map = new HashMap<String,String>(); 
              map.put("Effective Java", "Kathy Sierra");
              map.put("Spring in Action", "Craig Walls");
              map.put("Hibernate in Action", "Gavin King");
              map.put("Pro Angular", "Freeman");
              map.put("Pro Spring Boot", "Felipe Gutierrez");

      //Only modify if key already exists in the map

              map.computeIfPresent("Effective Java", (key, value) -> "Joshua Bloch");

      //Only modify if key doesn't exist in the map

              map.computeIfAbsent("Core Java", (value) -> "Kathy Sierra");

      //iterate and print the values
              map.entrySet().iterator()
               .forEachRemaining(System.out::println);

      }
}

Output

Below is the output after executing the program.

Hibernate in Action=Gavin King
Core Java=Kathy Sierra
Pro Angular=Freeman
Effective Java=Joshua Bloch
Pro Spring Boot=Felipe Gutierrez
Spring in Action=Craig Walls

How to print keys & values of a Map using Java 8 ?

As we should be aware that keySet() method returns all the keys contained in a Map as a set. The values() method returns all the values contained in a Map as a set. Hence, we should use keySet() to print all keys present in the map and values() to print all values. There are multiple ways to do that:

1) Using  Collection.iterator() and Iterator.forEachRemaining()
        map.keySet().iterator()
          .forEachRemaining(System.out::println);
2) Using Collection.stream() and Stream.forEach()
        map.values().stream()
          .forEach(System.out::println);
3) Using Stream.of() and  Collection.toArray() and Stream.forEach()
        Stream.of(map.keySet().toArray())
             .forEach(System.out::println);
4) Using Stream.of() and  Collection.toString() and Stream.forEach()
        Stream.of(map.values().toString())
             .forEach(System.out::println);

How many ways are there to print keys & values of a Map ?

There are multiple ways to print keys & values of a Map. Below is the list and examples of each approach.

1) Using Iterator
2) Using For-each loop
3) Using Java 8 – Collection.iterator() and Iterator.forEachRemaining()
4) Using Java 8 – Collection.stream() and Stream.forEach()
5) Using Java 8 – Stream.of() and  Collection.toArray() and Stream.forEach()
6) Using Java 8 – Stream.of() and  Collection.toString() and Stream.forEach()

        // 1. Using an iterator
        Iterator<Integer> itr = map.entrySet().iterator();
        while (itr.hasNext()) {
            System.out.println(itr.next());
        }

        // Using For-each loop
        for (Integer key: map.entrySet()) {
            System.out.println(key);
        }

        // Using Java 8 – Collection.iterator() and Iterator.forEachRemaining()
        map.entrySet().iterator()
          .forEachRemaining(System.out::println);

        
               // Using Java 8 – Collection.stream() and Stream.forEach()
        map.entrySet().stream()
          .forEach(System.out::println);

        
                // Using Java 8 – Stream.of() + Collection.toArray() + Stream.forEach()
        Stream.of(map.entrySet().toArray())
             .forEach(System.out::println);

        
                // Using Java 8 - Stream.of() and  Collection.toString() and Stream.forEach()
        Stream.of(map.entrySet().toString())
             .forEach(System.out::println);

How to convert String to Date Object using Java 8 ?

Below code demonstrates the concept. Here we can convert a String to four forms of a Date.
1) String to java.util.Date
2) String to java.time.LocalDate
3) String to java.time.LocalDateTime
4) String to java.time.ZonedDateTime
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Locale;

public class StringToDate {

   public static void main(String[] args) throws ParseException {

      //String to a java.util.Date
      SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss a", Locale.ENGLISH);
      String dateInString = "24-May-2021 9:45:30 AM";
      Date date = dateFormatter.parse(dateInString);
      System.out.println(date);

      //String to a java.time.LocalDate
      LocalDate localDate = LocalDate.parse("2021-05-24");
      System.out.println(localDate);

      //String to a java.time.LocalDateTime
      LocalDateTime localDateTime = LocalDateTime.parse("2021-05-24T21:45:30");
      System.out.println(localDateTime);

      //String to a java.time.ZonedDateTime
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
      ZonedDateTime zonedDateTime = ZonedDateTime.parse("2021-05-24 21:45:30 America/New_York", formatter);
      System.out.println(zonedDateTime);
  }

}

Output

Mon May 24 09:45:30 IST 2021
2021-05-24
2021-05-24T21:45:30
2021-05-24T21:45:30-04:00[America/New_York]

How many ways are there to initialize a Set ?

There are multiple ways to initialize a Set collection. Below is the list of some of them with examples.

1) Using Anonymous Class

Set<String> set = new HashSet<String>() {

       {  

        add("California"); 
        add("Chicago");
        add("New York"); 

       }
};

2) Using instance of another Collection

Set<String> set = new HashSet<>(Arrays.asList("California", "Chicago", "New York"));

3) Using Stream of Java 8

Set<String> set = Stream.of("California", "Chicago", "New York")
    .collect(Collectors.toCollection(HashSet::new));

4) Using Factory Method of Java 9

Set<String> set = Set.of("California", "Chicago", "New York");

How to create various collections using Factory Method of Java 9 ?

Java 9 introduced the new factory method to create immutable collections very concisely just a one-liner approach. The method name is of(…) for all the three interfaces(List, Set, Map). They have provided static methods for List, Set, and Map interfaces which take the elements as arguments and return an instance of List, Set, and Map, respectively. For example, as we can see in below code snippets, how simple, short, and concise are they!
List<String> list = List.of("USA", "Canada", "Russia"); 

Set<String> set = Set.of("USA", "Canada", "Russia");

Map<String, String> map = Map.of("USA", "Washington, D.C.", "Canada", "Ottawa", "Russia", "Moscow");
The above example creates unmodifiable collections with no generic type specified. However, we can also specify a generic type of the Collection returned by of() which will look like below:
List<String> list = List.<String>of("USA", "Canada", "Russia"); 
Set<String> set = Set.<String>of("USA", "Canada", "Russia"); 
Map<String, String> map = Map.<String, String>of("USA", "Washington, D.C.", "Canada", "Ottawa", "Russia", "Moscow");
The signature of these factory methods are as below :
static <E> List<E> of(E e1, E e2, E e3) 

static <E> Set<E> of(E e1, E e2, E e3)

static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3)   // K=Key, V=Value

How to retrieve values from Set using Java 8 ?

In order to retrieve values from a Set using Java 8, we can use Stream API of Java 8. Moreover, we must create a Stream from the Set and then iterate the Stream. For example, below code demonstrates the concept.

public class SetValuesRetrieval {

       public static void main(String[] args) {

       // Creating a Set
          Set<String> set = new HashSet<>();
          set.add("California");
          set.add("Chicago");
          set.add("New York");

      // Retrieving values of the Set
          Stream<String> stream = set.stream();
          stream.forEach((element) -> { System.out.println(element); });
       } 
}

However, if you are using JDK 9 and above version, you can even minimize the lines of code.

public class SetValuesRetrieval {

       public static void main(String[] args) {

       //Creating a Set
          Set<String> set = Set.of("California","Chicago","New York");

       //Retrieving values of the Set
          set.stream().forEach(System.out::println);
       } 
}

How to iterate a Map containing a List of String in Java 8 ?

Let’s assume that we are writing a program of Animal Kingdom. For example, suppose that there are three categories of Animals such as Mammals, Birds & Reptiles. We will have list of some Animals in each category. Let’s consider Categories as the keys and list of animals as the values of the Map.
public class IterateMapOfList {

      public static void main(String[] args) {

          // Create HashMap of category and list of animals under the category
          Map<String, List<String>> listOfAnimals = new HashMap<String, List<String>>();

          // List #1: Creating list of Animals in Mammals Category
          List<String> listOfMammals = Arrays.asList("Cat", "Dog", "Monkey", "Cow"); 
          //Adding listOfMammals into Mammal's Category
          listOfAnimals.put("Mammals", listOfMammals);

          // List #2: Creating list of Animals in Birds Category
          List<String> listOfBirds = Arrays.asList("Crow", "Parrot", "Peacock", "Flamingo"); 
          //Adding listOfMammals into Bird's Category
          listOfAnimals.put("Birds", listOfBirds);

          // List #3: Creating list of Animals in Reptiles Category
          List<String> listOfReptiles = Arrays.asList("Lizard", "Turtle", "Crocodile", "Python"); 
          //Adding listOfMammals into Reptile's Category
          listOfAnimals.put("Reptiles", listOfReptiles);

          // Iterating Map using forEach() in Java 8
          listOfAnimals.forEach(
               (key, value)->System.out.println(
                      "Category name : " + key + "\t\t"
                      + "List of Animals under the Category : " + value));
      }
}

Output 

Category name : Reptiles                      List of Animals under the Category : [Lizard, Turtle, Crocodile, Python]
Category name : Birds                           List of Animals under the Category : [Crow, Parrot, Peacock, Flamingo]
Category name : Mammals                   List of Animals under the Category : [Cat, Dog, Monkey, Cow]

How to count occurrences of each character of a String in Java 8?

For example, let’s assume a string “JAVA PROGRAMMER”. Now, we have to count occurrences of each character in this string including spaces. We are including space also, so that we do this exercise for a sentence as well using this program.
public class CharactersCountTest {

       public static void main(String[] args) {

            String someString = "JAVA PROGRAMMER";
            char[] strArray = someString.toCharArray();
            
            //getting distinct characters in strArray
            Set<Character> set = new TreeSet<>();
            for (char c : strArray){
              set.add(c);
            }
            //set.forEach(System.out::println);

            for (char c : set) {
               // Using Streams & Lambda Expressions in Java 8
               long count = someString.chars().filter(ch -> ch == c).count();
               System.out.println("Occurances of Character '" +c+ "' : " +count);
            }
}

Output

Occurrences of Character ' ' : 1
Occurrences of Character 'A' : 3
Occurrences of Character 'E' : 1
Occurrences of Character 'G' : 1
Occurrences of Character 'J' : 1
Occurrences of Character 'M' : 2
Occurrences of Character 'O' : 1
Occurrences of Character 'P' : 1
Occurrences of Character 'R' : 3
Occurrences of Character 'V' : 1

How to find next/previous(tomorrow/yesterday) date using Java 8?

Using Java 8 java.time.LocalDate API, we can find next/previous date. We can utilize plusDays() and minusDays() method to get the next day and the previous day, just by adding or subtracting 1 from today as shown below. We can also find the date after or before any number of days accordingly using this program.
private LocalDate getNextDay(LocalDate localdate) {

    return localdate.plusDays(1);
}

private LocalDate getPrevDay(LocalDate localdate) {

    return localdate.minusDays(1);
}

How to remove all duplicates from an array of integers in Java using Java 8?

Below is the program:

import java.util.Arrays;

public class RemoveDuplicates {
    public static void main(String[] args) {
       Integer[] array = {5, 10, 3, 7, 2, 10, 5};
       Integer[] distinct = Arrays.stream(array)
                                  .distinct()
                                  .toArray(Integer[]::new);
       System.out.println("Distinct elements: " + Arrays.toString(distinct));
    }
}

Output

Distinct elements: [5, 10, 3, 7, 2]

How to count the number of occurrences of a given word in a list of strings using Java 8?

Here is the program:

import java.util.Arrays;
import java.util.List;

public class WordCount {
    public static void main(String[] args) {
       List<String> strings = Arrays.asList("java scala ruby", "java react spring java");
       String word = "java";
       long count = strings.stream()
                           .flatMap(s -> Arrays.stream(s.split(" ")))
                           .filter(w -> w.equals(word))
                           .count();
       System.out.println("Occurrences of \"" + word + "\": " + count);
    }
}

Output

Occurrences of "java": 3

How to filter an array of strings by a given prefix using Java 8 Stream?

import java.util.Arrays;

public class StringPrefixFilter {
    public static void main(String[] args) {
       String[] strings = {"java", "scala", "javascript", "ruby","spring","angular"};
       String prefix = "j";
       String[] filtered = Arrays.stream(strings)
                                 .filter(s -> s.startsWith(prefix))
                                 .toArray(String[]::new);
       System.out.println("Filtered strings: " + Arrays.toString(filtered));
    }
}

Output

Filtered strings: [java, javascript]

Write a Java program using Stream to create a map from a list of strings where the key is the string and the value is its length?

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class StreamToMap {
    public static Map<String, Integer> mapToLength(List<String> list) {
       return list.stream()
                  .collect(Collectors.toMap(s -> s, String::length));
    }

    public static void main(String[] args) {
       List<String> names = Arrays.asList("java", "scala", "javascript", "ruby");
       System.out.println(mapToLength(names));
 
    }
}

This code uses Collectors.toMap to create a map where each string is mapped to its length.

Output

{java=4, scala=5, javascript=10, ruby=4}

How to filter and collect a list of strings that start with a specific letter using Java 8 Stream?

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamFilter {
    public static List<String> filterStrings(List<String> list, char letter) {
       return list.stream()
                  .filter(s -> s.startsWith(String.valueOf(letter)))
                  .collect(Collectors.toList());
    }

    public static void main(String[] args) {
       List<String> names = Arrays.asList("java", "scala", "javascript", "ruby");
       System.out.println(filterStrings(names, 'j')); 
    }
}

This code uses Java 8 Streams to filter a list of strings and collect those that start with a specific letter.

Output

[java, javascript]

How to sort a list of strings by length using Lambda expressions?

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class LambdaSort {
   public static void sortByLength(List<String> list) {
      Collections.sort(list, (a, b) -> Integer.compare(a.length(), b.length()));
   }

   public static void main(String[] args) {
      List<String> names = Arrays.asList("java", "scala", "javascript", "ruby");
      sortByLength(names);
      System.out.println(names); 
   }
}

This code uses a lambda expression to sort a list of strings by their length.

Output

[java, ruby, scala, javascript]

How to find the maximum value in a list of integers using Stream & Method Refrerence?

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

public class StreamMax {
   public static Optional<Integer> findMax(List<Integer> numbers) {
      return numbers.stream()
                    .max(Integer::compare);
   }

   public static void main(String[] args) {
      List<Integer> numbers = Arrays.asList(12, 42, 36, 54, 35);
      System.out.println(findMax(numbers).orElse(-1));
   }
}

This code uses Java 8 Streams & Method Reference to find the maximum value in a list of integers.

Output

54

Next Question will come shortly …..

 

4 thoughts on “Java 8 Coding Interview Questions

  1. Write a program using Java 8 streams to find second highest Integer in a given array of 11,13,65,76,45,98,123,100,111,44 ?

  2. int[] integerArray = {11,13,65,76,45,98,123,100,111,44};

    int secondHigest = Arrays.stream(integerArray).boxed().sorted(Comparator.reverseOrder()).limit(2).skip(1).findFirst().get();

    System.out.println(“secondHigest number is ” + secondHigest);

Leave a Reply


Top