为了账号安全,请及时绑定邮箱和手机立即绑定

Java 8中通过多个匹配值获取列表的对象

Java 8中通过多个匹配值获取列表的对象

米琪卡哇伊 2022-05-21 13:52:19
我正在尝试按最高值匹配进行规则过滤。我有一个包含多个产品的销售,我必须对每个产品应用不同的规则。获得此结果的最佳方法是什么?List<Rule> rules = listOfRules();String system = "MySystem1";Map<Product, Rule> mapOfProductRule = new HashMap<Product, Rule>();sale.getProducts().forEach(product -> {    int points = 0;    Rule matchedRule = null;    for (Rule rule : rules) {        if (system == rule.getSystem()) {            int countMatchs = 0;            if (sale.getValue1() == rule.getValue1()) countMatchs++;            if (sale.getValue2() == rule.getValue2()) countMatchs++;            if (product.getPvalue1() == rule.getPvalue1()) countMatchs++;            if (product.getPvalue2() == rule.getPvalue2()) countMatchs++;            if (countMatchs!= 0 && points < countMatchs)            {                points = countMatchs;                matchedRule = rule;            }        }    }    mapOfProductRule.put(product, matchedRule);});return mapOfProductRule;
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

首先,我会将所有 4 if.. 移动到Rule类中的一个方法中


public int getScore(Sale sale, Product product) {

    int count = 0;

    if (this.getValue1() == sale.getValue1()) count++;

    //...

    return count;

}

然后我会rules用


Rule bestRule = rules.stream().max(Comparator.comparingInt(r -> r.getScore(sale, product)));



查看完整回答
反对 回复 2022-05-21
  • 1 回答
  • 0 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信