Tuesday, April 30, 2024
HomeJavaQuiz your self: Splitting Java streams and utilizing escape characters

Quiz your self: Splitting Java streams and utilizing escape characters


Oracle Java, Oracle Java Tutorial and Materials, Oracle Java Prep, Oracle Java Guides, Oracle Java Certification, Java Career, Java Jobs, Java Skill

Take a look at your information of the Sample class and splitAsStream methodology

Given the next class

import java.util.Arrays;

import java.util.regex.Sample;

public class FooBaz {

  static ultimate Sample PIPE_SPLITTER = Sample.compile(“|”);

  public static void essential(String[] args) 11

  public int doIt(String s) {

    var a = PIPE_SPLITTER.splitAsStream(s)

       .mapToInt(v -> Integer.valueOf(v))

       .mapToObj(v -> new Integer[]{v % 3 == 0 ? 1 : 0, v % 5 == 0 ? 2 : 0, v})

       .scale back(new Integer[]{0, 0, 0}, (i, is) -> new Integer[]{i[0] + is[0], i[1] + is[1], i[2] + is[2]});

    return Arrays.stream(a).mapToInt(Integer::intValue).sum();

  }

}

What’s the consequence? Select one.

A. 56 is the output.

B. 57 is the output.

C. 58 is the output.

D. 59 is the output.

E. Compilation fails.

Reply. While you see an examination query that has unreasonably complicated code, remember to examine for easy issues first. You gained’t all the time discover the reply there, but when checking the arduous stuff goes to take a very long time, it’s sensible to examine the simple stuff first. On this instance, the code doesn’t, the truth is, compile. The reason being easy: The static essential methodology makes an attempt to name the doIt methodology with none express prefix, and such an invocation can work just for a static doIt() methodology. Nevertheless, doIt() is an occasion methodology and within the absence of an express prefix, such an invocation will fail. From this you possibly can shortly decide that possibility E is right, mark that as your reply, and transfer on to the following query.

Now that you realize the proper reply, let’s make this dialogue extra attention-grabbing by pretending that the doIt() methodology was static or that an express occasion prefix was supplied for the invocation of the doIt() methodology.

First, discover that the splitAsStream methodology splits the string argument “12|11|30″ into three textual content chunks—”12”, “11”, and “30”—that are then transformed to a stream of equal primitive int values by the mapToInt operation.

As facet notes, observe three issues: the usage of the Sample class’s splitAsStream methodology, the precompilation of the sample, and the escaping of the vertical bar character within the common expression sample.

◉ The splitAsStream methodology is extra direct than the extra widespread strategy of extracting gadgets from the supply textual content to an intermediate array utilizing the easy break up methodology after which making a stream from the weather of the array as a second step.

◉ The precompilation of the common expression sample makes no distinction right here, however discover that the sample is asserted as a static ultimate, slightly than being embedded within the physique of the tactic. Turning a textual common expression into the illustration that really performs sample matching is a reasonably CPU-intensive process, so it’s usually a good suggestion to rearrange {that a} sample is precompiled on this manner simply as soon as, slightly than referring to it within the string literal type in a manner which may contain it being compiled every time a loop executes that code.

◉ Be aware the character of the common expression literal. The straightforward vertical bar (or pipe) character represents an OR operation and have to be escaped. Nevertheless, a single backslash can be an try to flee the vertical bar within the parsing of the string literal, which might be not what you need. You’ll want to make a literal containing the character sequence “backslash, vertical bar.” As a result of backslash is itself the escape character, it have to be escaped, so two backslashes within the supply code make one within the binary code, which is what’s desired.

Going again to the operation of this stream, the three int values are mapped to a stream of Integer arrays, containing the next knowledge:

[1, 0, 12]

[0, 0, 11]

[1, 2, 30]

Discover that the conditional operators within the mapToObj argument will put 0 within the first array factor if the int within the stream is strictly divisible by 3 however put 1 in in any other case. The second factor of the array will likely be 0 if the int is strictly divisible by 5 however will likely be 2 in any other case. The third factor is just the int worth from the stream.

Subsequent the stream is diminished to a single Integer[] by summing values with the identical indices to supply the next consequence within the variable a:

[2, 2, 53]

Within the ultimate step, the array famous above is transformed to a stream of Integer objects, that are then transformed to primitives after which diminished to the sum of all components, producing 57 because the output. Thus, if the code had really compiled, possibility B would have been right.

Conclusion. The right reply is possibility E.

Supply: oracle.com

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments