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
永远不会产生空值,从而使您的过滤器无用。
这是我的 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
永远不会产生空值,从而使您的过滤器无用。