小白求助: Java 有什么方法可以做复杂条件过滤

2022-01-21 11:51:15 +08:00
 slomo

先说下一些条件的情况

总的来说就是需要实现类似 sql 的效果。但是用 java 实现。 条件里的字段是可以控制住的。

举例: 创建了一个抽奖活动,这个抽奖的参与条件如下:

  1. 会员和普通用户均能参加
  2. 会员需要积分参加
  3. 普通用户需要交钱参加

如上几个条件都是通过创建活动时管理员的配置来规定的,他也可以设置会员和普通用户都交钱参加,或者直接免费参与。或者普通用户直接不能参与...

而我要做的工作就是用户带着他的身份和其他必要信息参与抽奖时,去判断他是否有资格。这个判断条件这里该怎么存储和实现比较好呢?

求解。

ps:最好还能考虑到布尔值的短路情况和前端展示

pps:如果方案真的不错,有偿

2983 次点击
所在节点    程序员
20 条回复
smartbot
2022-01-21 11:52:26 +08:00
关键词: 规则引擎
wwwz
2022-01-21 11:59:32 +08:00
储存 OGNL 表达式,前端展示和 OGNL 互转
ic2y
2022-01-21 12:01:12 +08:00
aviator
storyxc
2022-01-21 12:17:27 +08:00
一楼+1 ,一般这种复杂场景+经常变更的规则用规则引擎比较好
Tsingchengliu
2022-01-21 13:58:45 +08:00
aviator 或者 groovy ,套个管理端就可以做简单的规则引擎
monetto
2022-01-21 14:02:58 +08:00
1. 规则引擎
2. 责任链模式 进行 链式判断
312ybj
2022-01-21 14:07:58 +08:00
规则引擎 drools
isJoey
2022-01-21 14:25:23 +08:00
国产开源 iteflow 应该能满足
CoooooolFrog
2022-01-21 16:08:57 +08:00
推荐 aviator ,非常好用( aviator 的作者就坐在我背后 )
cheng6563
2022-01-21 16:14:13 +08:00
直接配置 SQL WHERE 完事,更进一步就是直接写 Js 或者 Groovy 脚本。
用规则引擎也行。

别想着搞个什么责任链或者流程引擎什么的然后全部图形化配置。
andy2415
2022-01-21 16:32:05 +08:00
简单的规则用 Predicate 就够用了吧
themostlazyman
2022-01-21 16:38:42 +08:00
JDK8 list.stream().filter
lele140
2022-01-21 16:45:03 +08:00
aviator +1
beitayongguo
2022-01-21 16:45:10 +08:00
都在说规则引擎~ 其实表达式引擎也可以的吧
wolfie
2022-01-21 16:50:10 +08:00
spring 的 spel 也可以。

cn.hutool.extra.expression.ExpressionEngine 看实现类。
zxjunz
2022-01-21 17:18:46 +08:00
@CoooooolFrog #9 牛逼
fanshaohua
2022-01-21 23:28:38 +08:00
c# 有 LINQ ,Java 对应的应该是 Stream

https://putridparrot.com/blog/javas-linq-equivalent-streams/
RuLaiFo
2022-01-22 09:52:05 +08:00
是单表还是多表查询。
cryboy007
2022-01-22 11:17:05 +08:00
涨知识了,我们项目都是自己写用 if else 拼接.真的是又臭又长
slomo
2022-01-25 17:09:02 +08:00
@CoooooolFrog 厉害了大佬,能不能请问下表达式跟对象转换有什么好的方法嘛🥺,单独表达式前端不好展示

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/829646

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX