Skip to content

Commit 5f10e82

Browse files
author
Nicolai Parlog
committed
Describe Java scripting
1 parent a87214b commit 5f10e82

File tree

5 files changed

+104
-0
lines changed

5 files changed

+104
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ Check out the [jpms](http://blog.codefx.org/tag/jpms/) tag on my blog, [this dem
8989

9090
## JVM & Tooling
9191

92+
*[single-source-file execution](src/main/java/org/codefx/demo/java11/jvm/script) and scripting: run [the script](echo) with `cat echo-haiku.txt | ./echo` ([article](http://blog.codefx.org/java/scripting-java-shebang/), [JEP 330](https://openjdk.java.net/jeps/330))
9293
*[application class-dara sharing](app-cds.sh) ([article](http://blog.codefx.org/java/application-class-data-sharing/), [JEP 310](http://openjdk.java.net/jeps/310))
9394
* ⑨ multi-release JARs: [classes](src/main/java/org/codefx/demo/java9/internal/multi_release) and [the script](multi-release.sh) ([JEP 238](http://openjdk.java.net/jeps/238))
9495
* ⑨ platform logging: [classes](src/platform_logging/java/org/codefx/demo/java9/api/platform_logging) and [the script](platform-logging.sh) ([JEP 264](http://openjdk.java.net/jeps/264))

echo

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#!/opt/jdk-11/bin/java --source 11
2+
3+
import java.io.BufferedReader;
4+
import java.io.IOException;
5+
import java.io.InputStreamReader;
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
import java.util.Set;
9+
import java.util.stream.Stream;
10+
11+
public class Echo {
12+
13+
public static void main(String[] args) throws IOException {
14+
var lines = readInput();
15+
for (var arg : args)
16+
lines = modifyStream(arg, lines);
17+
lines.forEach(System.out::println);
18+
}
19+
20+
private static Stream<String> modifyStream(String arg, Stream<String> input) {
21+
switch (arg){
22+
case "--sort": return input.sorted();
23+
case "--unique": return input.distinct();
24+
case "--reverse": return reverse(input);
25+
default: {
26+
System.out.println("Unknown argument '" + arg + "'.");
27+
return input;
28+
}
29+
}
30+
}
31+
32+
private static Stream<String> reverse(Stream<String> input) {
33+
var reversed = new ArrayList<String>();
34+
input.forEach(line -> reversed.add(0, line));
35+
return reversed.stream();
36+
}
37+
38+
private static Stream<String> readInput() throws IOException {
39+
var reader = new BufferedReader(new InputStreamReader(System.in));
40+
if (!reader.ready())
41+
return Stream.empty();
42+
else
43+
return reader.lines();
44+
}
45+
46+
}

echo-haiku.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
worker bees can leave
2+
even drones can fly away
3+
the queen is their slave
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.codefx.demo.java11.jvm.script;
2+
3+
import java.io.BufferedReader;
4+
import java.io.IOException;
5+
import java.io.InputStreamReader;
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
import java.util.Set;
9+
import java.util.concurrent.ThreadLocalRandom;
10+
import java.util.stream.Stream;
11+
12+
public class Echo {
13+
14+
public static void main(String[] args) throws IOException {
15+
var lines = readInput();
16+
for (var arg : args)
17+
lines = modifyStream(arg, lines);
18+
lines.forEach(System.out::println);
19+
}
20+
21+
private static Stream<String> modifyStream(String arg, Stream<String> input) {
22+
switch (arg){
23+
case "--sort": return input.sorted();
24+
case "--unique": return input.distinct();
25+
case "--reverse": return reverse(input);
26+
default: {
27+
System.out.println("Unknown argument '" + arg + "'.");
28+
return input;
29+
}
30+
}
31+
}
32+
33+
private static Stream<String> reverse(Stream<String> input) {
34+
var reversed = new ArrayList<String>();
35+
input.forEach(line -> reversed.add(0, line));
36+
return reversed.stream();
37+
}
38+
39+
private static Stream<String> readInput() throws IOException {
40+
var reader = new BufferedReader(new InputStreamReader(System.in));
41+
if (!reader.ready())
42+
return Stream.empty();
43+
else
44+
return reader.lines();
45+
}
46+
47+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
public class HelloJavaScripts {
2+
3+
public static void main(String[] args) {
4+
System.out.println("Hello, Java Scripts!");
5+
}
6+
7+
}

0 commit comments

Comments
 (0)