如何使用 Java 9 中 JShell 中的终端流操作?
JShell 是一种交互式工具,接受简单的语句、表达式等作为输入,对其求值,并立即向用户打印结果。
终端操作是一种流操作,接受流作为输入并不返回任何输出流。例如,可以将终端操作应用于lambda 表达式,并返回一个结果(单个基元值/对象,或单个对象集合)。reduce()、max() 和 min() 方法就是此类终端操作。
在下面的代码片段中,我们可以在 JShell 中使用不同的终端操作:min()、max() 和 reduce() 方法。
片段
jshell> IntStream.range(1, 11).reduce(0, (n1, n2) -> n1 + n2); $1 ==> 55 jshell> List.of(23, 12, 34, 53).stream().max(); | Error: | method max in interface java.util.stream.Stream cannot be applied to given types; | required: java.util.Comparator | found: no arguments | reason: actual and formal argument lists differ in length | List.of(23, 12, 34, 53).stream().max(); | ^----------------------------------^ jshell> List.of(23, 12, 34, 53).stream().max((n1, n2) -> Integer.compare(n1, n2)); $2 ==> Optional[53] jshell> $2.isPresent() $3 ==> true jshell> List.of(23, 12, 34, 53).stream().max((n1, n2) -> Integer.compare(n1, n2)).get(); $4 ==> 53 jshell> List.of(23, 12, 34, 53).stream().filter(e -> e%2==1).forEach(e -> System.out.println(e)) 23 53 jshell> List.of(23, 12, 34, 53).stream().filter(e -> e%2==1).collect(Collectors.toList()); $6 ==> [23, 53] jshell> List.of(23, 12, 34, 53).stream().min((n1, n2) -> Integer.compare(n1, n2)).get(); $8 ==> 12
广告