java for循环迭代_一个'for'循环迭代Java中的枚举

Streams

Java 8之前

for (Direction dir : Direction.values()) {

System.out.println(dir);

}

Java 8

我们也可以使用lambda和streams(Tutorial):

Stream.of(Direction.values()).forEachOrdered(System.out::println);

Why forEachOrdered and not forEach with streams ?

forEach 的行为明确是不确定的,因为 forEachOrdered 对流的每个元素执行操作,如果流具有已定义的遭遇顺序,则按流的遭遇顺序执行 . 所以 forEach 不保证订单会被保留 .

在处理流(尤其是并行流)时,请记住流的本质 . 根据doc:

如果流操作的行为参数是有状态的,则流管道结果可能是不确定的或不正确的 . 有状态lambda是一个结果取决于在流管道执行期间可能发生变化的任何状态的lambda .

Set seen = Collections.synchronizedSet(new HashSet<>());

stream.parallel().map(e -> { if (seen.add(e)) return 0; else return e; })...

这里,如果映射操作是并行执行的,则由于线程调度差异,相同输入的结果可能因运行而异,而对于无状态lambda表达式,结果将始终相同 .

通常,不鼓励行为参数对流操作的副作用,因为它们通常会导致无意中违反无国籍要求以及其他线程安全危险 .

流可能有也可能没有已定义的遭遇顺序 . 流是否具有遭遇顺序取决于源和中间操作 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值