使用 java 流的等效代码用于常规 for 循环

Equivalent code using java streams for conventional for loop

我需要使用 Java 流转换此 for 循环代码:

boolean present = false;
for (Long studentKey : studentKeys) {
    if (!studentKey.equals(student.getId())) {
        present= true;
        log.debug(STR_SESSION_BLOCKED_ANOTHER_USER);
    }
}

您可以按照以下说明进行操作:

  • 创建包含 if 条件的流实例:studentKeys.stream().filter(key -> !key.equals(student.getId()))

  • 将您的流嵌套在供应商实例中 (class java.util.function.Supplier)。实际上,每个流实例只能处理一次,供应商允许我们在每次需要时重新创建一个新实例。

  • 对您的流进行必要的操作(presentlog.debug)。

下面的代码是这样的:

Supplier<Stream<Long>> studentFilter = () ->
        studentKeys.stream().filter(key -> !key.equals(student.getId()));

boolean present = (studentFilter.get().count() != 0L);
studentFilter.get().forEach(key -> log.debug(STR_SESSION_BLOCKED_ANOTHER_USER));

上面的等效代码returns我是正确的布尔标志

    boolean present = studentKeys.stream() .anyMatch(key -> 
    !key.equals(student.getId())); 
    if(present) log.debug(STR_SESSION_BLOCKED_ANOTHER_USER);