Use Java object and primitive Streams, including lambda expressions implementing functional interfaces, to supply, filter, map, consume, and sort data.
Perform decomposition, concatenation and reduction, and grouping and partitioning on sequential and parallel streams.
1. The correct answer is C.
Explanation:
Optional<String> optional = new Optional<>(value);
Optional does not have a public constructor. Instead, static factory methods like of and ofNullable should be used.Optional<String> optional = Optional.of(value);
Optional.of(value) throws a NullPointerException if value is null. In this scenario, since getValue() can return null, this line could lead to an exception.Optional<String> optional = Optional.ofNullable(value);
Optional.ofNullable(value) will return an Optional describing the specified value if non-null, or an empty Optional if the value is null. This is the appropriate way to handle a potentially null value.Optional<String> optional = Optional.empty(value);
Optional.empty() does not accept any arguments. It simply returns an empty Optional.Optional<String> optional = Optional.nullable(value);
nullable in the Optional class. The correct method for this purpose is ofNullable.2. The correct answer is E.
Explanation:
stream.filter(s -> s.contains("A"));
filter is an intermediate operation. It returns a new stream with elements that match the given predicate.stream.map(String::toLowerCase);
map is an intermediate operation. It returns a new stream with elements that are the results of applying the given function.stream.distinct();
distinct is an intermediate operation. It returns a new stream with distinct elements.stream.limit(2);
limit is an intermediate operation. It returns a new stream that is truncated to be no longer than the given size.stream.collect(Collectors.toList());
collect is a terminal operation. It triggers the processing of the stream and collects the elements into a List.3. The correct answer is D.
Explanation:
int sum = numbers.stream().sum();
stream method directly on them. You need to use a method from a utility class like IntStream to create a stream.int sum = IntStream.range(0, numbers.length).sum();
IntStream.range(0, numbers.length) generates a stream of integers from 0 to the length of the array, not the elements of the array itself.int sum = IntStream.from(numbers).sum();
IntStream does not have a from method. The correct method is of.int sum = IntStream.of(numbers).sum();
IntStream.of(numbers).sum() correctly creates an IntStream from the array and calculates the sum of its elements.int sum = IntStream.range(numbers).sum();
IntStream.range requires two arguments (a start and an end index) and is used to generate a stream of numbers within a range, not to sum an array.4. The correct answer is A.
Explanation:
Stream<String> filteredStream = stream.filter(s -> s.length() > 3);
filter is the correct intermediate operation to apply a predicate to each element of the stream and return a new stream containing only elements that match the predicate.Stream<String> filteredStream = stream.map(s -> s.length() > 3);
map is used to transform elements of the stream and does not filter them. The result would be a stream of Boolean values instead of the original strings.Stream<String> filteredStream = stream.collect(Collectors.filtering(s -> s.length() > 3));
Collectors.filtering is not a valid method. Filtering is done through the filter method on the stream itself, not via collectors.Stream<String> filteredStream = stream.filtering(s -> s.length() > 3);
filtering method on the stream. The correct method is filter.Stream<String> filteredStream = stream.filterByLength(3);
filterByLength method on the stream. The correct method to use is filter.5. The correct answer is C.
Explanation:
Stream<String> lengthStream = stream.map(s -> s.length());
map method will transform the elements to Integer, not String. The correct type for the resulting stream should be Stream<Integer>.Stream<String> lengthStream = stream.mapToInt(s -> s.length());
mapToInt produces an IntStream, not a Stream<String>. Additionally, the resulting stream type would not be Stream<String>.Stream<Integer> lengthStream = stream.map(s -> s.length());
map transforms each string in the stream to its length, resulting in a Stream<Integer>.IntStream lengthStream = stream.map(s -> s.length());
map produces a Stream<R>, not an IntStream. The correct method for producing an IntStream would be mapToInt.Stream<String> lengthStream = stream.flatMap(s -> Stream.of(s.length()));
flatMap is used to flatten nested streams and not simply map to another type. Additionally, the resulting stream type would not be Stream<String>.6. The correct answer is A.
Explanation:
Stream<String> resultStream = stream.skip(2).limit(3);
skip(2) skips the first 2 elements of the stream, and limit(3) limits the stream to the next 3 elements. Therefore, the resulting stream will contain the 3rd, 4th, and 5th elements of the original list.Stream<String> resultStream = stream.limit(3).skip(2);
limit(3) first limits the stream to the first 3 elements, and then skip(2) skips 2 of those elements, resulting in a stream with only the 3rd element.Stream<String> resultStream = stream.skip(3).limit(2);
skip(3) skips the first 3 elements, and limit(2) then limits the stream to the next 2 elements, resulting in a stream with the 4th and 5th elements.Stream<String> resultStream = stream.limit(2).skip(3);
limit(2) first limits the stream to the first 2 elements, and then skip(3) would attempt to skip more elements than are available, resulting in an empty stream.Stream<String> resultStream = stream.slice(2, 5);
slice method in the Stream API. The correct methods to achieve the desired result are skip and limit.7. The correct answer is B.
Explanation:
Stream<String> resultStream = Stream.concat(stream1, stream2.collect(Collectors.toList()));
Stream.concat expects two streams as arguments. stream2.collect(Collectors.toList()) converts stream2 into a List, not a Stream.Stream<String> resultStream = Stream.concat(stream1, stream2);
Stream.concat(stream1, stream2) correctly concatenates the two streams into a single stream containing all elements from both streams.Stream<String> resultStream = stream1.concat(stream2);
Stream does not have an instance method concat. The concat method is a static method of the Stream class.Stream<String> resultStream = stream1.merge(stream2);
merge method in the Stream API. The correct method for concatenating streams is Stream.concat.Stream<String> resultStream = Stream.of(stream1, stream2);
Stream.of(stream1, stream2) creates a stream of streams, resulting in Stream<Stream<String>> rather than a single concatenated Stream<String>.8. The correct answer is E.
Explanation:
int product = stream.reduce(1, (a, b) -> a + b);
(a, b) -> a * b.int product = stream.reduce((a, b) -> a * b);
Optional<Integer> rather than an int.int product = stream.reduce(0, (a, b) -> a * b);
1, not 0. Using 0 as the identity value would result in a product of 0 regardless of the stream elements.Optional<Integer> product = stream.reduce(1, (a, b) -> a * b);
reduce method with an identity value does not return an Optional. It should return the result directly as int.int product = stream.reduce(1, (a, b) -> a * b, (a, b) -> a * b);
reduce method with an identity value of 1 and a combiner function that multiplies the results. This form of reduce is suitable for parallel processing as well, ensuring the product is correctly calculated across multiple segments of the stream.9. The correct answer is B.
Explanation:
Set<String> resultSet = stream.collect(Collectors.toSet());
Collectors.toSet() does not guarantee the order of the elements. The implementation returned by this collector does not preserve the order of insertion.Set<String> resultSet = stream.collect(Collectors.toCollection(LinkedHashSet::new));
Collectors.toCollection(LinkedHashSet::new) collects the elements into a LinkedHashSet, which maintains the order of insertion.Set<String> resultSet = stream.collect(Collectors.toCollection(TreeSet::new));
TreeSet sorts the elements according to their natural ordering (or by a comparator, if provided). This does not necessarily preserve the original order of the stream elements.Set<String> resultSet = stream.collect(Collectors.toList());
Collectors.toList() collects the elements into a List, not a Set.Set<String> resultSet = stream.collect(Collectors.toMap());
Collectors.toMap() is used to collect the elements into a Map, not a Set.Do you like what you read? Would you consider?
Do you have a problem or something to say?