public IntStream getPseudoInts(String algorithm, int streamSize) { // returns an IntStream with size @streamSize of random numbers generated using the @algorithm // where the lower bound is 0 and the upper is 100 (exclusive) return RandomGeneratorFactory.of(algorithm) .create() .ints(streamSize, 0,100); }
例子,创建5个0-10(不包含)的随机数。
1 2 3 4 5 6 7 8 9
@Test publicvoidtestPrng(){ RandomGeneratorFactory<RandomGenerator> l128X256MixRandom = RandomGeneratorFactory.of("L128X256MixRandom"); // 使用时间戳作为随机数种子 RandomGeneratorrandomGenerator= l128X256MixRandom.create(System.currentTimeMillis()); for (inti=0; i < 5; i++) { System.out.print(randomGenerator.nextInt(10)+"\t"); } }
➜ bin ./java -version openjdk version "17"2021-09-14 OpenJDK Runtime Environment(build 17+35-2724) OpenJDK 64-Bit Server VM(build 17+35-2724, mixed mode, sharing) ➜ bin ./java --illegal-access=warn OpenJDK 64-Bit Server VM warning: Ignoring option --illegal-access=warn; support was removed in 17.0
if (obj instanceof String s) { // Let pattern matching do the work! ... }
现在switch也支持了这种模式转化
1 2 3 4 5 6 7 8 9
static String formatterPatternSwitch(Object o) { returnswitch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); }; }
staticrecordHuman (String name, int age, String profession) {}
public String checkObject(Object obj) { returnswitch (obj) { case Human h -> "Name: %s, age: %s and profession: %s".formatted(h.name(), h.age(), h.profession()); case Circle c -> "This is a circle"; case Shape s -> "It is just a shape"; casenull -> "It is null"; default -> "It is an object"; }; }
public String checkShape(Shape shape) { returnswitch (shape) { case Triangle t && (t.getNumberOfSides() != 3) -> "This is a weird triangle"; case Circle c && (c.getNumberOfSides() != 0) -> "This is a weird circle"; default -> "Just a normal shape"; }; }
publicvoidnewVectorComputation(float[] a, float[] b, float[] c) { for (vari=0; i < a.length; i += SPECIES.length()) { varm= SPECIES.indexInRange(i, a.length); varva= FloatVector.fromArray(SPECIES, a, i, m); varvb= FloatVector.fromArray(SPECIES, b, i, m); varvc= va.mul(vb); vc.intoArray(c, i, m); } }
publicvoidcommonVectorComputation(float[] a, float[] b, float[] c) { for (vari=0; i < a.length; i ++) { c[i] = a[i] * b[i]; } }
@Override public String toString() { return"Dog{" + "name='" + name + '\'' + '}'; } // get...set... }
classPocimplementsSerializable{ }
这时反序列化会得到异常:
1 2 3 4 5
Exception in thread "main" java.io.InvalidClassException: filter status: REJECTED at java.base/java.io.ObjectInputStream.filterCheck(ObjectInputStream.java:1412) at java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2053) at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1907) ....