gpt4 book ai didi

java - 使用流 api 从 Stream<@Nullable T> 转换为 Stream<@NonNull T>

转载 作者:行者123 更新时间:2023-12-02 03:03:26 25 4
gpt4 key购买 nike

我使用CheckerFramework

如何从 Stream 中删除 null 并获取 @NonNull 对象的集合?

Stream<@Nullable T> -> (remove nulls) -> Stream<@NonNull T>

最佳答案

这是执行此操作的代码。

import java.util.Objects;
import java.util.stream.Stream;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;

class RemoveNullsFromStream {

@SuppressWarnings("nullness") // Nullness Checker is not hard-coded with
// implementation details of filter and Objects::nonNull
<T>
Stream<@NonNull T> removeNullsFromStream(Stream<@Nullable T> arg) {
return arg.filter(Objects::nonNull);
}

}

请注意 @SuppressWarnings 的使用,因为 Nullness Checker 是保守的:只要它无法明确证明代码安全,它就会发出警告。一般来说,filter的输出与其输入相同;当 filter 的参数为 Objects::nonNull 时是一种特殊情况。

这种特殊情况可以被硬编码到空值检查器中,这将使空值检查器更加精确。此行为当前不是特殊情况,因此您可以使用 @SuppressWarnings 来代替。

关于java - 使用流 api 从 Stream<@Nullable T> 转换为 Stream<@NonNull T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42107233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com