QueryDsl reduce 表达式流

QueryDsl reduce expression stream

这是我的 querydsl 表达式流:

Stream.of(
    Pair.of(QPatient.patient.name.any().given, Optional.ofNullable(given)),
    Pair.of(QPatient.patient.name.any().family, Optional.ofNullable(family))
)
.filter(pair -> Objects.nonNull(pair.getValue()));

我想创建一个 BooleanExpression

我试过使用 BooleanBuilder,但我不太清楚如何将流项目收集并减少到单个 BooleanExpression

很快,没有流:

BooleanBuilder booleanBuilder = new BooleanBuilder();
booleanBuilder.and(booleanExpression1).and(booleanExpression2)...

有什么想法吗?

您可以在 Stream.reduce 中使用 BooleanBuilder,如下所示:

BooleanBuilder reduce = Stream.of(
            QPatient.patient.id.isNull(),
            QPatient.patient.id.isNull()
        ).reduce(new BooleanBuilder(), BooleanBuilder::and, BooleanBuilder::and);

这对你不起作用的原因是 BooleanBuilder 只接受谓词而 QPair 不是谓词(事实上,甚至不是布尔表达式)。

另请注意,Optional.ofNullable 永远不会产生空值,从而使您的过滤器无用。