java - 在并行流中遇到空对象时添加日志

标签 java filter java-8 stream java-stream

不确定这里的语法,新的 lambda 表达式和排序。

            itemStream.parallel().filter(Objects::nonNull).forEach( 
                (item) -> randomMethod(item));

我之前在 for 循环中的内容是检查 null,然后在遇到 null 项时发出警告

                    log.warn("Skipping a null item!");

如何使用基于流的方法在遇到空对象(同时仍在过滤)时记录?

最佳答案

你可以使用 Stream::peek:

itemStream.parallel()
    .peek(item -> { if (item == null) log.warn("Skipping a null item!"); })
    .filter(Objects::nonNull)
    .forEach(item -> randomMethod(item));

您也可以使用 randomMethod 的方法引用(这里我假设它是 this 的成员):

itemStream.parallel()
    .peek(item -> { if (item == null) log.warn("Skipping a null item!"); })
    .filter(Objects::nonNull)
    .forEach(this::randomMethod);

关于java - 在并行流中遇到空对象时添加日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51505884/

相关文章:

java - 使用 itext5 将文本添加到 PDF 中的矩形

java - gradle:找不到@Entity符号

javascript - Angular JS 中的响应子节点应用于多维数组对象中的过滤器

django 管理员 : queryset filter not working

c# - 像在 C# linq 中一样在 Java 8 中获取匿名对象

java - 合并大文件而不将整个文件加载到内存中?

java - 如何使用 apache pdfbox 在 pdf 中打印 html 文本

java - fragment 无法在旋转时恢复正确的 View

javascript - React - 过滤返回错误的行

java - 将数组/字符串列表转换为数组/整数列表的 Lambda 表达式