根据实体类的某些List属性求交集 越多相似越靠前

此篇博客介绍了如何使用TreeSet数据结构,通过计算交易间的相似性,对数据进行排序,以便于展示相似度高的交易在结果集中靠前。通过示例展示了根据不同属性(functionId, consumerBenefit, incis)的集合交集操作来实现这一功能。
摘要由CSDN通过智能技术生成
/**
 * 相似排行 越多相似越靠前
 * 有排序属性的TreeSet为目标结果集
 *
 * @param trades
 */
public void sameSort(TreeMap<Integer, List> sms, List<Trade> trades, String str, String keyType) {
    if (StrUtil.isEmpty(str)) return;
    Map<Long, Trade> srcs = convertListToMap(trades, keyType);

    Set<String> sets = Sets.newHashSet(str.split(","));
    for (Long key : srcs.keySet()) {
        Set<String> sets2 = new HashSet<>();
        if ("functionId".equals(keyType)) {
            sets2 = Sets.newHashSet(srcs.get(key).getFunctionIds().split(","));
        } else if ("consumerBenefit".equals(keyType)) {
            sets2 = Sets.newHashSet(srcs.get(key).getConsumerBenefitIds().split(","));
        } else if ("incis".equals(keyType)) {
            sets2 = Sets.newHashSet(srcs.get(key).getInciIds().split(","));
        }
        Sets.SetView<String> intersection = Sets.intersection(sets, sets2);
        int n = intersection.size();
        if (n > 0) {
            List<Trade> allList;
            if (sms.get(n) == null) {
                allList = new ArrayList<>();
                sms.put(n, allList);
            } else {
                allList = sms.get(n);
            }
            allList.add(srcs.get(key));
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值