我是靠谱客的博主 贤惠汽车,最近开发中收集的这篇文章主要介绍巧用数据结构解决项目中遇到的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

项目需求:

问题: 页面上的表格显示(以及数据库中的字段):日期,省市,新增用户,活跃用户

有相当一部分的“省市”字段为乱码


要求:将所有字段为乱码的省市记录都显示为”其它“,对每天省市为”其它“的新增用户,以及活跃用户数分别求和,然后只显示一条记录

难点分析:数据库中无法识别乱码(所以无法使用sum,group等函数),在List中比较难处理元素归并,求和等问题,在List中一边遍历一边删除元素的话会遇到线程同步问题等。。


思路:单独写一个方法用来判断乱码(若是乱码返回false),将List中字段是乱码的函数添加到map中(key是时间,value是新增用户,活跃用户等,map可以更加方便地进行归并,求和等操作),创建一个新的list对象,将list中的所有元素拷贝过去,然后其中一个用于判断,另外一个用于添加删除,这样可以解决list线程同步问题

代码如下:

判断是乱码的方法: 

public static boolean cclm(String source) {
        boolean flag = true;
        char ws[] = new char[] { '"', '?', ' ', ''', '&' };
        for (int i = 0; i < source.length(); i++) {
            char c = source.charAt(i);
            for (int j = 0; j < ws.length; j++) {
                char v = ws[j];
                if (c == v) {
                    flag = false;
                }
            }
            if ((int) c == 0xfffd) {
                flag = false;
            }
        }
        return flag;
    }


其它部分逻辑代码(GeneralGeogDisDomain是自定义的一个对象用来封装日期,省市,新增用户,活跃用户):

List<GeneralGeogDisDomain> list = new ArrayList<GeneralGeogDisDomain>();

List<GeneralGeogDisDomain> list_new = new ArrayList<GeneralGeogDisDomain>();

Map<Long, Long> newNumMap = new HashMap<Long, Long>();
Map<Long, Long> numMap = new HashMap<Long, Long>();

for (GeneralGeogDisDomain geodis1 : list_new) {
if (!Utils.cclm(geodis1.getProvince())) {
if (null == newNumMap.get(geodis1.getTime())) {
newNumMap.put(geodis1.getTime(),
geodis1.getNewUserNum());
} else {
Long temNewNum = newNumMap.get(geodis1.getTime());
newNumMap.remove(geodis1.getTime());
newNumMap.put(geodis1.getTime(),
temNewNum + geodis1.getNewUserNum());
}
if (null == numMap.get(geodis1.getTime())) {
numMap.put(geodis1.getTime(), geodis1.getNum());
} else {
Long temNum = numMap.get(geodis1.getTime());
numMap.remove(geodis1.getTime());
numMap.put(geodis1.getTime(), temNum + geodis1.getNum());
}


list.remove(geodis1);
}
}


Iterator<Long> it = newNumMap.keySet().iterator();
Iterator<Long> nt = numMap.keySet().iterator();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
while (it.hasNext() && nt.hasNext()) {
GeneralGeogDisDomain g = new GeneralGeogDisDomain();
Long key = it.next();
Long newNum = newNumMap.get(key);
Long num = numMap.get(nt.next());
g.setNewUserNum(newNum);
g.setNum(num);
g.setProvince("其它");
g.setTime(sdf.format(new Date(key)));


list.add(g);
}

最后

以上就是贤惠汽车为你收集整理的巧用数据结构解决项目中遇到的问题的全部内容,希望文章能够帮你解决巧用数据结构解决项目中遇到的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部