如何使用 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

更新于: 23-Apr-2020

201 次访问

开启您的职业

完成课程以获得认证

立即开始
广告