如何转换for循环以查找Java流中的第一个匹配项?

埃文:

我有以下功能正常的代码

for (UniversityClass class : allClasses)
    {
        Period<Date> classDate = class.getClassDates();
        if (classDate.start().before(classEndDate)
                && classDate.end().after(classBeginDate))
        {
            classBooked = true;
            break;
        }
    }

我已经试过了:

allClasses.stream().filter(class -> {
            Period<Date> classDate = class.getClassDates();
            if (classDate.start().before(classEndDate)
                && classDate.end().after(classBeginDate))

            return true;
        }).findFirst().ifPresent($ -> {
            classBooked = true;
        });

但这会添加一个return语句。同样,该classBooked变量需要声明为final,但是不能这样做。做错了什么?

同样,一旦成真,我就需要break摆脱它。这就是为什么我想到添加findFirst()。ifPresent()的原因

Jean-BaptisteYunès:

您可以使用anyMatch替代的filterfindFirst

classBooked = allClasses.stream()
                        .anyMatch(c -> {
                            Period<Date> classDate = c.getClassDates();
                            return (classDate.start().before(classEndDate) && classDate.end().after(classBeginDate));
                        });

您可能还map习惯于提高可读性:

classBooked = allClasses.stream()
                        .map(UniversityClass::getClassDates)
                        .anyMatch(d -> d.start().before(classEndDate) && d.end().after(classBeginDate));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

返回Java 8流中的第一个匹配项(类似于_.find)

如何在Scala的流中查找第一个重复项

如何在多个文件中查找第一个匹配项

NSPredicate仅查找第一个匹配项

使用Regex和Java查找第一个匹配项

在Multiindex数据框中查找每个索引的第一个匹配项

在Pandas数据框中查找第一个匹配项

查找文件中第一个匹配项的快捷方式

分别在每个文件夹分支中查找第一个匹配项

在1和0的字符串中查找0的第一个匹配项

在Kotlin的嵌套列表中查找并返回第一个匹配项?

在列表列表中向后查找第一个匹配项

如何使此选择查找另一个表并找到第一个匹配项?

如何过滤出不匹配在Java顺序流的谓词的第一个元素?

如何让`grep -o` 只输出一行中的第一个匹配项?

如何使用sed仅替换文件中的第一个匹配项?

如何在Powershell中仅删除不带“}”的行的第一个匹配项?

从熊猫数据框中找到值的第一个匹配项(从值列表中查找)并返回该行的索引

如何根据数组(和找到的节点)中的第一个匹配项查询第一个节点?

通过给定变量查找条件的第一个匹配项

MySQL-查找第一个匹配项或通配符

告诉find函数查找第36行之后的第一个匹配项吗?

查找第一个包含来自数组的匹配项

RegEx:基于第一个两个字符查找匹配项

在条件的第一个匹配项上执行查找的公式

Bash脚本在URL之后查找字符串的第一个匹配项

如何只匹配Vimregex中的第一个

返回第一个结果匹配断言在Java流或所有非匹配结果

For循环返回NA:仅返回ifelse语句的第一个匹配项