Given the code fragment: List<String> str = Arrays.asList ("my", "pen", "is", "your', "pen"); Predicate<String> test = s -> { int i = 0; boolean result = s.contains ("pen"); System.out.print(i++) + ":"); return result; }; str.stream() .filter(test) .findFirst() .ifPresent(System.out ::print); What is the result?
Click on the arrows to vote for the correct answer
A. B. C. D. E.A.
The code creates a list of strings str
containing the values "my", "pen", "is", "your", and "pen". It then creates a Predicate
named test
that checks if a given string contains the substring "pen".
In the test
Predicate
, there is a local variable i
initialized to 0. Whenever the test
Predicate
is called, it will print the value of i
followed by a colon (":"). After printing the value of i
, i
is incremented by 1. The test
Predicate
returns true if the input string contains "pen", and false otherwise.
The str
list is converted to a stream and filtered using the test
Predicate
. The findFirst()
method returns an Optional
containing the first element of the filtered stream. If the Optional
is not empty, the ifPresent()
method prints the value of the element using System.out.print()
.
The output of the program will be: 0:pen
Here's a step-by-step explanation of how the output is produced:
test
Predicate
.test
Predicate
is "pen".test
Predicate
is called once for this string, which prints "0:" (the value of i
is 0 at this point) and returns true.findFirst()
method returns an Optional
containing "pen".ifPresent()
method calls System.out.print()
with the value "pen", producing the output "pen".test
Predicate
was called once and printed "0:", the final output is "0:pen".