Question 1: What are the main features introduced in Java 8?
Answer:
Java 8 introduced several powerful features that transformed Java into a more modern programming language:
- Lambda Expressions: Enable functional programming with concise syntax for anonymous functions.
- Stream API: Allows bulk data processing operations on collections in a functional style.
- Functional Interfaces: Interfaces with only one abstract method (e.g., Runnable, Predicate, Function).
- Optional Class: A container object to avoid NullPointerException.
- Default Methods in Interfaces: Lets interfaces have method implementations.
- New Date and Time API: Replaces java.util.Date with immutable, thread-safe classes like LocalDate, LocalTime.
- Method References: A shorthand for lambda expressions using ::.
Question 2: What are functional interfaces?
Answer:
A functional interface is an interface that has exactly one abstract method. These interfaces are the basis for lambda expressions and method references in Java 8.
Key Points:
- Annotated with @FunctionalInterface (optional but recommended).
- Support functional programming in Java.
- Examples:
- Runnable → void run()
- Predicate<T> → boolean test(T t)
- Function<T, R> → R apply(T t)
- Runnable → void run()
Question 3: Explain Stream and its key methods.
Answer:
A Stream in Java represents a sequence of elements that support sequential or parallel aggregate operations.
Types of Operations:
- Intermediate Operations (return a new Stream):
- filter(): Filters elements based on a condition.
- map(): Transforms each element.
- sorted(): Sorts the stream.
- filter(): Filters elements based on a condition.
- Terminal Operations (produce a result):
- collect(): Converts stream into a collection.
- forEach(): Iterates over elements.
- reduce(): Aggregates elements.
- collect(): Converts stream into a collection.
Streams promote functional-style operations and are lazy, meaning computation happens only during terminal operations.
Question 4: What is the difference between map() and flatMap()?
Answer:
Feature | map() | flatMap() |
Definition | Transforms each element into another form | Transforms and flattens nested collections |
Output | Stream of transformed elements | Single flat Stream from nested collections |
Use Case | List<String> → List<Integer> | List<List<String>> → List<String> |
Example:
java
map(): List<Optional<String>> → List<Optional<String>>
flatMap(): List<Optional<String>> → List<String>
Question 5: What is Optional in Java 8?
Answer:
Optional is a container object which may or may not contain a non-null value. It helps in writing null-safe code.
Important Methods:
- Optional.of(value): Wraps a non-null value.
- Optional.empty(): Creates an empty Optional.
- Optional.ifPresent(action): Executes action if value is present.
- Optional.orElse(defaultValue): Returns value if present; otherwise, returns default.
Question 6: How do default methods work in interfaces?
Answer:
Java 8 allows interfaces to have default implementations using the default keyword.
Example:
java
interface MyInterface {
default void show() {
System.out.println(“Default Method”);
}
}
This helps in extending interfaces without breaking existing implementations.
Question 7: What is the purpose of Collectors?
Answer:
The Collectors utility class in Java 8 helps accumulate elements of a Stream into collections or summary results.
Popular Collectors:
- toList(), toSet(): Collects elements into list or set.
- joining(): Joins strings with delimiter.
- groupingBy(): Groups elements by a classifier.
- partitioningBy(): Splits elements into two groups based on predicate.
Question 8: How does the Date and Time API differ from java.util.Date?
Answer:
Java 8 introduced a modern, immutable, and thread-safe Date and Time API under java.time package:
Feature | Old API (Date) | New API (LocalDate, etc.) |
Mutability | Mutable | Immutable |
Thread Safety | Not thread-safe | Thread-safe |
Formatting | SimpleDateFormat | DateTimeFormatter |
Time Zone Support | Limited | ZonedDateTime provides full support |
Question 9: What are method references in Java 8?
Answer:
Method references are shorthand syntax for calling methods using ::. They improve code readability.
Types:
- Static method: ClassName::staticMethod
- Instance method of object: instance::instanceMethod
- Constructor: ClassName::new
Example:
java
List<String> list = Arrays.asList(“a”, “b”);
list.forEach(System.out::println);
Question 10: What is parallelStream() in Java 8?
Answer:
parallelStream() enables parallel processing of elements using multiple threads. It’s suitable for processing large datasets where order is not critical.
Example:
java
List<Integer> numbers = Arrays.asList(1, 2, 3);
numbers.parallelStream().map(n -> n * 2).forEach(System.out::println);
Use with caution when:
- Order matters.
- The dataset is small.
- The operation is not CPU-intensive.
Question 11: What is the difference between Stream.findFirst() and Stream.findAny()?
Answer:
Method | Behavior | Use Case |
findFirst() | Returns the first element (ordered) | For ordered or sequential streams |
findAny() | Returns any element (non-deterministic) | For parallel streams where order doesn’t matter |
Example:
java
Optional<String> first = list.stream().findFirst();
Optional<String> any = list.parallelStream().findAny();
👉The Next 10 Questions-2: JAVA BACKEND