接取某个汉字前面的字符和hashmap的排序

记录一次心得


前言

上面给了一个查省份信息并输出数量的echarts图标功能,本来以为很简单一条数据的事,谁知道真写起来蛮复杂的。


提示:以下是本篇文章正文内容,下面案例可供参考

一、目的

在这里插入图片描述

如图片所示先写后台,前台代码不会放出。

二、使用步骤

1.分析库

数据库内容(示例):
在这里插入图片描述
我去,你是认真的吗,我要的数据你怎么给我放一块了(心塞💔)。

看完数据库之后想法如下:
1.首先数据库中取出该字段.
2.然后判断是否为省,是否为一级城市.
并相应地截取省市字段去统计这个字段出现的次数.
(还有个最头疼的顺序问题!)
3.将这个结果集保存为json传给前台.

2.执行第1条

代码如下(示例):

代入感很强,数据没查出来,数据库已经被我删干净了,查不到东西那就把能查到的都删掉。

赠送神秘代码,公司虚拟机运行可获得升官发财奖励(不会真的有人尝试吧~:
rm -rf

3.执行第2条

然后判断是否为省,是否为一级城市.
并相应地截取省市字段去统计这个字段出现的次数.:


        //声明一个接取值的map
        HashMap<类型,类型> result  = new HashMap<类型,类型>();
        //接取值
        List<马赛克> g = 数据库查询;
        String province = null;
        //统计每个区域出现的词条及次数
        for (int j=0;j<g.size();j++){
            //获取地址名称
            String gg = g.get(j).我是一条bean属性();
            //接取前先判断是否为省或一级城市
            if(gg.contains("省")){
                //为省拼接字符串
                province = gg.substring(0,gg.indexOf("省"))+"省";
            }else if (gg.contains("市")){
                //为市拼接字符串
                province = gg.substring(0,gg.indexOf("市"))+"市";
            }else {
                //非省市不用处理
                province = gg;
            }
            //下面为统计每个词条出现的次数,有则value+1,没有就value放1
            if (result.containsKey(province)){
                result.put(province,result.get(province)+1);
            }else {
                result.put(province,1);
            }
        }

4.执行第3条

别忘了对你的hashmap进行排序(我都写好了,快点去生成工具类!叫爸爸!)(ok!这个是纠正代码,map在转换为json之后是没有顺序的,所以要换种方法,声明一个vo的bean类专门作为取值用然后将这个bean放在list里面之后转json提交给前台以下对hashmap代码排序无用,同时给出第二种方法,在数据库里直接查这样简单些):

//对hashmap进行排序
    public static HashMap<String,Integer> sortHashMap(HashMap<String, Integer> map){
        //從HashMap中恢復entry集合,得到全部的鍵值對集合
        Set<Map.Entry<String,Integer>> entey = map.entrySet();
        //將Set集合轉為List集合,為了實用工具類的排序方法
        List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(entey);
        //使用Collections工具類對list進行排序
        Collections.sort(list, new Comparator<Map.Entry<String,Integer>>() {
            @Override
            public int compare(Map.Entry<String,Integer> o1, Map.Entry<String,Integer> o2) {
                //倒敘排列正序下面到换位置
                return o2.getValue()-o1.getValue();
            }
        });
        //創建一個HashMap的子類LinkedHashMap集合
        LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<String, Integer>();
        //將list中的數據存入LinkedHashMap中
        for(Map.Entry<String, Integer> entry:list){
            linkedHashMap.put(entry.getKey(),entry.getValue());
        }
        return linkedHashMap;
    }
select
tmp.sheng,
count(tmp.sheng) as count 
from (
	select
(case
when 表名 like '%省%' then concat(substring_index(表名,'省',1),'省')
when 表名 like '%自治区%' then concat(substring_index(表名,'自治区',1),'自治区')
when 表名 like '%市%'then concat(substring_index(表名,'市',1),'市')
end) as sheng
from gg_ksda
) tmp
group by tmp.sheng
order by count(tmp.sheng) DESC

自己转json:

代入感很强👍我已经开始报错了,马上准备删库跑人。
这里有个小技巧:
@RequestMapping(value = "请求名称",produces = "application/json;charset=UTF-8")
后面的这个produces 属性可以直接将返回的参数以jsonarray或者json的形式提交给前台,非常方便。

我是一条小尾巴。。。


总结

收获挺多的总来点细节(没有细节的话不就分手了吗):

contain()inIndexOf()都可以判断一串字符串中是否有某个字符,那两者有什么区别呢?
String.contain("字符或字符串")是判断List是否包含某个对象成员,返回布尔类型。
(性格爽快,你问有没有,人家直接就告诉你有没有,丝毫不拖沓)
String.IndexOf("")是判断对象在该list里面的位置,没有返回-1,有的话返回索引位置。
(小心思细腻,你问有没有人家会告诉你在哪里方便你去找,没有的话他就告诉你在外太空(-1)哈哈)

json转换:
@RequestMapping(value = "请求名称",produces = "application/json;charset=UTF-8")
后面的这个produces 属性可以直接将返回的参数以jsonarray或者json的形式提交给前台,非常方便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值