城市名称按首字母分组排序,并实现多音字处理

一、需求

        将城市列表(中文)按照首字母分组排序,以26个字母的顺序进行分组。

        传统的解决方式使用如下pinyin4j来解决:

<dependency>
    <groupId>com.belerweb</groupId>
    <artifactId>pinyin4j</artifactId>
    <version>2.5.0</version>
</dependency>

        但是该包对于多音字问题不好解决,例如:长沙市 会转化为zhangshashi,而不是changshashi。这会导致分组混乱,网上也有利用该包和字典的形式进行解决,但我始终觉得太麻烦,还得维护字典表。故而找到另外一种方式(jpinyin),加上自己写的处理类来实现想要的效果。

二、所需依赖

<dependency>
       <groupId>com.github.stuxuhai</groupId>
       <artifactId>jpinyin</artifactId>
       <version>1.1.8</version>
</dependency>

三、工具类

import com.github.stuxuhai.jpinyin.PinyinException;
import com.github.stuxuhai.jpinyin.PinyinFormat;
import com.github.stuxuhai.jpinyin.PinyinHelper;

import java.text.Collator;
import java.util.*;

/**
 * @Description TODO
 * @Author lgx
 * @Time 2023/4/17
 */
public class ChangeChinesePinyinUtil {

    /**
     * 获取姓名全拼和首字母
     * PinyinFormat:WITH_TONE_MARK(声调模式),WITH_TONE_NUMBER(数字代表声调模式),WITHOUT_TONE(无声调模式)
     * @param  chinese 汉语名称
     * @return fullPinyin : 全拼   simplePinyin : 首字母  groupPinyin:微信用户组第一个字母
     * @throws PinyinException
     */
    public static Map<String, String> changeChinesePinyin(String chinese) throws PinyinException {
        Map<String, String> pinyin = new HashMap<String, String>();

        //将中文转化成拼音(全拼)
        String fullPinyin = PinyinHelper.convertToPinyinString(chinese,"", PinyinFormat.WITHOUT_TONE);
        //将中文转化为简拼模式(各汉字第一个字母组成)
        String simplePinyin = PinyinHelper.getShortPinyin(chinese);
        //首字母
        String firstPinyin = String.valueOf(simplePinyin.charAt(0));

        //判断是否多音字
//        System.out.println(PinyinHelper.hasMultiPinyin('啊'));//true

        pinyin.put("fullPinyin", fullPinyin);
        pinyin.put("simplePinyin", simplePinyin.toUpperCase());
        pinyin.put("groupPinyin", firstPinyin.toUpperCase());
        return pinyin;
    }
    /**
     * 按拼音首字母分组
     * @param list
     * @return
     */
    public static Map<String, List<String>> getCodeGroup(List<String> list) throws PinyinException{
        Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA);
        //按字母排序
        Collections.sort(list, com);
        //输出26个字母
        Map<String, List<String>> map = new TreeMap<String, List<String>>();
        for(int i=1;i<=26;i++){
            String word = String. valueOf((char) (96 + i)). toUpperCase();
            //循环找出首字母一样的数据
            List<String> letter = new ArrayList<String>();
            for (String str : list) {
                String code = changeChinesePinyin(str).get("groupPinyin");
                if(word.equals(code)) {
                    letter.add(str);
                }
            }
            map.put(word, letter);
        }
        return map;
    }


    public static void main(String[] args) throws PinyinException {
        List<String> list=new ArrayList<String>();
        list.add("长沙市");
        list.add("长治市");
        list.add("嘉义市");
        list.add("重庆市");
        list.add("德阳市");
        list.add("佛山市");
        list.add("伊犁哈萨克自治州");
        Map<String, List<String>> codeGroup = getCodeGroup(list);
        System.out.println("codeGroup = " + codeGroup);


//        String str = "长沙市";
//        //设置声调表示格式
//        System.out.println(PinyinHelper.convertToPinyinString(str, ",", PinyinFormat.WITH_TONE_MARK)); // nǐ,hǎo,shì,jiè
//        //数字表示声调
//        System.out.println(PinyinHelper.convertToPinyinString(str, ",", PinyinFormat.WITH_TONE_NUMBER)); // ni3,hao3,shi4,jie4
//        //无声调
//        System.out.println( PinyinHelper.convertToPinyinString(str, ",", PinyinFormat.WITHOUT_TONE)); // ni,hao,shi,jie
//        //获取拼音首字母
//        System.out.println(PinyinHelper.getShortPinyin(str)); // nhsj
//        //判断是否多音字
//        System.out.println(PinyinHelper.hasMultiPinyin('啊'));//true
    }
}

四、业务处理

        业务处理方法:

public Map searchCity() {
    //获取城市对象列表
    List<Region> regionListByLevel = regionFeignClient.getRegionListByLevel(2,cityName);
    //按照城市名称分组,方便后面进行首字母分组获取城市对象
    Map<String, Region> map = regionListByLevel.stream().collect(Collectors.toMap(Region::getName, Region -> Region));
    //获取所有城市名称
    List<String> keyCollect = map.keySet().stream().collect(Collectors.toList());
    //封装返回结果
    Map<String,Object> result = new HashMap<>();
    try {
        //按照首字母进行城市分组
        Map<String, List<String>> codeGroup = ChangeChinesePinyinUtil.getCodeGroup(keyCollect);
        //将分组对象转化成前端所需格式类型
        List<WxMainCitysForClientVO> citys = new ArrayList<>();
        codeGroup.forEach((k,v) -> {
             WxMainCitysForClientVO citysForLetter = new WxMainCitysForClientVO();
             citysForLetter.setLetter(k);
             List<WxCityForClientVO> list = new ArrayList<>();
             v.forEach(i->{
                    WxCityForClientVO vo = new WxCityForClientVO();
                    BeanUtils.copyProperties(map.get(i),vo);
                    list.add(vo);
             });
             citysForLetter.setData(list);
             citys.add(citysForLetter);
        });
        result.put("itemArr",citys);
    } catch (PinyinException badHanyuPinyinOutputFormatCombination) {
        throw new BaseException("转换首字母异常!");
    }
    return result;
}

        各封装类:

import com.baomidou.mybatisplus.annotation.TableField;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 区域信息
 *
 */
@Data
@NoArgsConstructor
public class Region {
    /**
     * 区域主键
     */
    private long id;
    /**
     * 区域名称
     */
    private String name;
    /**
     * 区域上级标识
     */
    private long pid;
    /**
     * 区域等级
     */
    private int level;
    @TableField(exist = false)
    private List<Region> children;

    public Region(Integer id) {
        this.id = id;
    }
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @Description TODO 小程序首页城市下拉显示层
 * @Author lgx
 * @Time 2023/3/27
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WxMainCitysForClientVO {

    /**
     * 首字母
     */
    private String letter;
    /**
     * 城市集合
     */
    private List<WxCityForClientVO> data;
}

五、返回结果

    "itemArr": [
      {
        "letter": "A",
        "data": [
          {
            "id": 513200,
            "name": "阿坝藏族羌族自治州"
          },
          {
            "id": 652900,
            "name": "阿克苏地区"
          },
          {
            "id": 659002,
            "name": "阿拉尔市"
          },
          {
            "id": 152900,
            "name": "阿拉善盟"
          },
          {
            "id": 654300,
            "name": "阿勒泰地区"
          },
          {
            "id": 542500,
            "name": "阿里地区"
          },
          {
            "id": 210300,
            "name": "鞍山市"
          },
          {
            "id": 610900,
            "name": "安康市"
          },
          {
            "id": 340800,
            "name": "安庆市"
          },
          {
            "id": 520400,
            "name": "安顺市"
          },
          {
            "id": 410500,
            "name": "安阳市"
          },
          {
            "id": 820100,
            "name": "澳门半岛"
          }
        ]
      },
      {
        "letter": "B",
        "data": [
          {
            "id": 150800,
            "name": "巴彦淖尔市"
          },
          {
            "id": 652800,
            "name": "巴音郭楞蒙古自治州"
          },
          {
            "id": 511900,
            "name": "巴中市"
          },
          {
            "id": 220800,
            "name": "白城市"
          },
          {
            "id": 469025,
            "name": "白沙黎族自治县"
          },
          {
            "id": 220600,
            "name": "白山市"
          },
          {
            "id": 620400,
            "name": "白银市"
          },
          {
            "id": 451000,
            "name": "百色市"
          },
          {
            "id": 340300,
            "name": "蚌埠市"
          },
          {
            "id": 150200,
            "name": "包头市"
          },
          {
            "id": 130600,
            "name": "保定市"
          },
          {
            "id": 530500,
            "name": "保山市"
          },
          {
            "id": 469029,
            "name": "保亭黎族苗族自治县"
          },
          {
            "id": 610300,
            "name": "宝鸡市"
          },
          {
            "id": 450500,
            "name": "北海市"
          },
          {
            "id": 110100,
            "name": "北京市"
          },
          {
            "id": 659005,
            "name": "北屯市"
          },
          {
            "id": 210500,
            "name": "本溪市"
          },
          {
            "id": 520500,
            "name": "毕节市"
          },
          {
            "id": 371600,
            "name": "滨州市"
          },
          {
            "id": 652700,
            "name": "博尔塔拉蒙古自治州"
          },
          {
            "id": 341600,
            "name": "亳州市"
          }
        ]
      },
      {
        "letter": "C",
        "data": [
          {
            "id": 130900,
            "name": "沧州市"
          },
          {
            "id": 540300,
            "name": "昌都市"
          },
          {
            "id": 652300,
            "name": "昌吉回族自治州"
          },
          {
            "id": 469026,
            "name": "昌江黎族自治县"
          },
          {
            "id": 430700,
            "name": "常德市"
          },
          {
            "id": 320400,
            "name": "常州市"
          },
          {
            "id": 220100,
            "name": "长春市"
          },
          {
            "id": 430100,
            "name": "长沙市"
          },
          {
            "id": 140400,
            "name": "长治市"
          },
          {
            "id": 211300,
            "name": "朝阳市"
          },
          {
            "id": 445100,
            "name": "潮州市"
          },
          {
            "id": 431000,
            "name": "郴州市"
          },
          {
            "id": 510100,
            "name": "成都市"
          },
          {
            "id": 469023,
            "name": "澄迈县"
          },
          {
            "id": 130800,
            "name": "承德市"
          },
          {
            "id": 341700,
            "name": "池州市"
          },
          {
            "id": 150400,
            "name": "赤峰市"
          },
          {
            "id": 451400,
            "name": "崇左市"
          },
          {
            "id": 341100,
            "name": "滁州市"
          },
          {
            "id": 532300,
            "name": "楚雄彝族自治州"
          },
          {
            "id": 500100,
            "name": "重庆市"
          }
        ]
      },
      {
        "letter": "D",
        "data": [
          {
            "id": 511700,
            "name": "达州市"
          },
          {
            "id": 532900,
            "name": "大理白族自治州"
          },
          {
            "id": 210200,
            "name": "大连市"
          },
          {
            "id": 230600,
            "name": "大庆市"
          },
          {
            "id": 140200,
            "name": "大同市"
          },
          {
            "id": 232700,
            "name": "大兴安岭地区"
          },
          {
            "id": 210600,
            "name": "丹东市"
          },
          {
            "id": 533100,
            "name": "德宏傣族景颇族自治州"
          },
          {
            "id": 510600,
            "name": "德阳市"
          },
          {
            "id": 371400,
            "name": "德州市"
          },
          {
            "id": 533400,
            "name": "迪庆藏族自治州"
          },
          {
            "id": 469021,
            "name": "定安县"
          },
          {
            "id": 621100,
            "name": "定西市"
          },
          {
            "id": 469007,
            "name": "东方市"
          },
          {
            "id": 370500,
            "name": "东营市"
          },
          {
            "id": 441900,
            "name": "东莞市"
          },
          {
            "id": 469003,
            "name": "儋州市"
          },
          {
            "id": 820200,
            "name": "氹仔岛"
          }
        ]
      },
      {
        "letter": "E",
        "data": [
          {
            "id": 150600,
            "name": "鄂尔多斯市"
          },
          {
            "id": 420700,
            "name": "鄂州市"
          },
          {
            "id": 422800,
            "name": "恩施土家族苗族自治州"
          }
        ]
      },
      {
        "letter": "F",
        "data": [
          {
            "id": 450600,
            "name": "防城港市"
          },
          {
            "id": 440600,
            "name": "佛山市"
          },
          {
            "id": 350100,
            "name": "福州市"
          },
          {
            "id": 210400,
            "name": "抚顺市"
          },
          {
            "id": 361000,
            "name": "抚州市"
          },
          {
            "id": 210900,
            "name": "阜新市"
          },
          {
            "id": 341200,
            "name": "阜阳市"
          }
        ]
      },
      {
        "letter": "G",
        "data": [
          {
            "id": 623000,
            "name": "甘南藏族自治州"
          },
          {
            "id": 513300,
            "name": "甘孜藏族自治州"
          },
          {
            "id": 360700,
            "name": "赣州市"
          },
          {
            "id": 710200,
            "name": "高雄市"
          },
          {
            "id": 640400,
            "name": "固原市"
          },
          {
            "id": 511600,
            "name": "广安市"
          },
          {
            "id": 510800,
            "name": "广元市"
          },
          {
            "id": 440100,
            "name": "广州市"
          },
          {
            "id": 450300,
            "name": "桂林市"
          },
          {
            "id": 450800,
            "name": "贵港市"
          },
          {
            "id": 520100,
            "name": "贵阳市"
          },
          {
            "id": 632600,
            "name": "果洛藏族自治州"
          }
        ]
      },
      {
        "letter": "H",
        "data": [
          {
            "id": 230100,
            "name": "哈尔滨市"
          },
          {
            "id": 652200,
            "name": "哈密地区"
          },
          {
            "id": 632200,
            "name": "海北藏族自治州"
          },
          {
            "id": 630200,
            "name": "海东市"
          },
          {
            "id": 460100,
            "name": "海口市"
          },
          {
            "id": 632500,
            "name": "海南藏族自治州"
          },
          {
            "id": 632800,
            "name": "海西蒙古族藏族自治州"
          },
          {
            "id": 130400,
            "name": "邯郸市"
          },
          {
            "id": 610700,
            "name": "汉中市"
          },
          {
            "id": 330100,
            "name": "杭州市"
          },
          {
            "id": 371700,
            "name": "菏泽市"
          },
          {
            "id": 653200,
            "name": "和田地区"
          },
          {
            "id": 340100,
            "name": "合肥市"
          },
          {
            "id": 451200,
            "name": "河池市"
          },
          {
            "id": 441600,
            "name": "河源市"
          },
          {
            "id": 410600,
            "name": "鹤壁市"
          },
          {
            "id": 230400,
            "name": "鹤岗市"
          },
          {
            "id": 451100,
            "name": "贺州市"
          },
          {
            "id": 231100,
            "name": "黑河市"
          },
          {
            "id": 131100,
            "name": "衡水市"
          },
          {
            "id": 430400,
            "name": "衡阳市"
          },
          {
            "id": 532500,
            "name": "红河哈尼族彝族自治州"
          },
          {
            "id": 150100,
            "name": "呼和浩特市"
          },
          {
            "id": 150700,
            "name": "呼伦贝尔市"
          },
          {
            "id": 211400,
            "name": "葫芦岛市"
          },
          {
            "id": 330500,
            "name": "湖州市"
          },
          {
            "id": 713500,
            "name": "花莲县"
          },
          {
            "id": 431200,
            "name": "怀化市"
          },
          {
            "id": 320800,
            "name": "淮安市"
          },
          {
            "id": 340600,
            "name": "淮北市"
          },
          {
            "id": 340400,
            "name": "淮南市"
          },
          {
            "id": 421100,
            "name": "黄冈市"
          },
          {
            "id": 632300,
            "name": "黄南藏族自治州"
          },
          {
            "id": 341000,
            "name": "黄山市"
          },
          {
            "id": 420200,
            "name": "黄石市"
          },
          {
            "id": 441300,
            "name": "惠州市"
          }
        ]
      },
      {
        "letter": "I",
        "data": []
      },
      {
        "letter": "J",
        "data": [
          {
            "id": 710300,
            "name": "基隆市"
          },
          {
            "id": 230300,
            "name": "鸡西市"
          },
          {
            "id": 360800,
            "name": "吉安市"
          },
          {
            "id": 220200,
            "name": "吉林市"
          },
          {
            "id": 370100,
            "name": "济南市"
          },
          {
            "id": 370800,
            "name": "济宁市"
          },
          {
            "id": 419001,
            "name": "济源市"
          },
          {
            "id": 330400,
            "name": "嘉兴市"
          },
          {
            "id": 710700,
            "name": "嘉义市"
          },
          {
            "id": 713000,
            "name": "嘉义县"
          },
          {
            "id": 620200,
            "name": "嘉峪关市"
          },
          {
            "id": 230800,
            "name": "佳木斯市"
          },
          {
            "id": 440700,
            "name": "江门市"
          },
          {
            "id": 410800,
            "name": "焦作市"
          },
          {
            "id": 445200,
            "name": "揭阳市"
          },
          {
            "id": 620300,
            "name": "金昌市"
          },
          {
            "id": 330700,
            "name": "金华市"
          },
          {
            "id": 713700,
            "name": "金门县"
          },
          {
            "id": 211500,
            "name": "金普新区"
          },
          {
            "id": 210700,
            "name": "锦州市"
          },
          {
            "id": 140500,
            "name": "晋城市"
          },
          {
            "id": 140700,
            "name": "晋中市"
          },
          {
            "id": 420800,
            "name": "荆门市"
          },
          {
            "id": 421000,
            "name": "荆州市"
          },
          {
            "id": 360200,
            "name": "景德镇市"
          },
          {
            "id": 360400,
            "name": "九江市"
          },
          {
            "id": 810200,
            "name": "九龙"
          },
          {
            "id": 620900,
            "name": "酒泉市"
          }
        ]
      },
      {
        "letter": "K",
        "data": [
          {
            "id": 653100,
            "name": "喀什地区"
          },
          {
            "id": 410200,
            "name": "开封市"
          },
          {
            "id": 650200,
            "name": "克拉玛依市"
          },
          {
            "id": 653000,
            "name": "克孜勒苏柯尔克孜自治州"
          },
          {
            "id": 530100,
            "name": "昆明市"
          }
        ]
      },
      {
        "letter": "L",
        "data": [
          {
            "id": 540100,
            "name": "拉萨市"
          },
          {
            "id": 371200,
            "name": "莱芜市"
          },
          {
            "id": 451300,
            "name": "来宾市"
          },
          {
            "id": 620100,
            "name": "兰州市"
          },
          {
            "id": 131000,
            "name": "廊坊市"
          },
          {
            "id": 469027,
            "name": "乐东黎族自治县"
          },
          {
            "id": 511100,
            "name": "乐山市"
          },
          {
            "id": 530700,
            "name": "丽江市"
          },
          {
            "id": 331100,
            "name": "丽水市"
          },
          {
            "id": 713800,
            "name": "连江县"
          },
          {
            "id": 320700,
            "name": "连云港市"
          },
          {
            "id": 513400,
            "name": "凉山彝族自治州"
          },
          {
            "id": 500300,
            "name": "两江新区"
          },
          {
            "id": 371500,
            "name": "聊城市"
          },
          {
            "id": 211000,
            "name": "辽阳市"
          },
          {
            "id": 220400,
            "name": "辽源市"
          },
          {
            "id": 542600,
            "name": "林芝地区"
          },
          {
            "id": 530900,
            "name": "临沧市"
          },
          {
            "id": 141000,
            "name": "临汾市"
          },
          {
            "id": 469024,
            "name": "临高县"
          },
          {
            "id": 622900,
            "name": "临夏回族自治州"
          },
          {
            "id": 371300,
            "name": "临沂市"
          },
          {
            "id": 469028,
            "name": "陵水黎族自治县"
          },
          {
            "id": 450200,
            "name": "柳州市"
          },
          {
            "id": 341500,
            "name": "六安市"
          },
          {
            "id": 520200,
            "name": "六盘水市"
          },
          {
            "id": 350800,
            "name": "龙岩市"
          },
          {
            "id": 621200,
            "name": "陇南市"
          },
          {
            "id": 431300,
            "name": "娄底市"
          },
          {
            "id": 820300,
            "name": "路环岛"
          },
          {
            "id": 141100,
            "name": "吕梁市"
          },
          {
            "id": 410300,
            "name": "洛阳市"
          },
          {
            "id": 510500,
            "name": "泸州市"
          },
          {
            "id": 411100,
            "name": "漯河市"
          }
        ]
      },
      {
        "letter": "M",
        "data": [
          {
            "id": 340500,
            "name": "马鞍山市"
          },
          {
            "id": 440900,
            "name": "茂名市"
          },
          {
            "id": 441400,
            "name": "梅州市"
          },
          {
            "id": 511400,
            "name": "眉山市"
          },
          {
            "id": 510700,
            "name": "绵阳市"
          },
          {
            "id": 712500,
            "name": "苗栗县"
          },
          {
            "id": 231000,
            "name": "牡丹江市"
          }
        ]
      },
      {
        "letter": "N",
        "data": [
          {
            "id": 542400,
            "name": "那曲地区"
          },
          {
            "id": 360100,
            "name": "南昌市"
          },
          {
            "id": 511300,
            "name": "南充市"
          },
          {
            "id": 320100,
            "name": "南京市"
          },
          {
            "id": 450100,
            "name": "南宁市"
          },
          {
            "id": 350700,
            "name": "南平市"
          },
          {
            "id": 320600,
            "name": "南通市"
          },
          {
            "id": 712800,
            "name": "南投县"
          },
          {
            "id": 411300,
            "name": "南阳市"
          },
          {
            "id": 511000,
            "name": "内江市"
          },
          {
            "id": 330200,
            "name": "宁波市"
          },
          {
            "id": 350900,
            "name": "宁德市"
          },
          {
            "id": 533300,
            "name": "怒江傈僳族自治州"
          }
        ]
      },
      {
        "letter": "O",
        "data": []
      },
      {
        "letter": "P",
        "data": [
          {
            "id": 510400,
            "name": "攀枝花市"
          },
          {
            "id": 211100,
            "name": "盘锦市"
          },
          {
            "id": 713600,
            "name": "澎湖县"
          },
          {
            "id": 360300,
            "name": "萍乡市"
          },
          {
            "id": 410400,
            "name": "平顶山市"
          },
          {
            "id": 620800,
            "name": "平凉市"
          },
          {
            "id": 713300,
            "name": "屏东县"
          },
          {
            "id": 350300,
            "name": "莆田市"
          },
          {
            "id": 530800,
            "name": "普洱市"
          },
          {
            "id": 410900,
            "name": "濮阳市"
          }
        ]
      },
      {
        "letter": "Q",
        "data": [
          {
            "id": 230900,
            "name": "七台河市"
          },
          {
            "id": 230200,
            "name": "齐齐哈尔市"
          },
          {
            "id": 522600,
            "name": "黔东南苗族侗族自治州"
          },
          {
            "id": 522700,
            "name": "黔南布依族苗族自治州"
          },
          {
            "id": 522300,
            "name": "黔西南布依族苗族自治州"
          },
          {
            "id": 429005,
            "name": "潜江市"
          },
          {
            "id": 450700,
            "name": "钦州市"
          },
          {
            "id": 130300,
            "name": "秦皇岛市"
          },
          {
            "id": 370200,
            "name": "青岛市"
          },
          {
            "id": 441800,
            "name": "清远市"
          },
          {
            "id": 621000,
            "name": "庆阳市"
          },
          {
            "id": 469002,
            "name": "琼海市"
          },
          {
            "id": 469030,
            "name": "琼中黎族苗族自治县"
          },
          {
            "id": 530300,
            "name": "曲靖市"
          },
          {
            "id": 350500,
            "name": "泉州市"
          },
          {
            "id": 330800,
            "name": "衢州市"
          }
        ]
      },
      {
        "letter": "R",
        "data": [
          {
            "id": 540200,
            "name": "日喀则市"
          },
          {
            "id": 371100,
            "name": "日照市"
          }
        ]
      },
      {
        "letter": "S",
        "data": [
          {
            "id": 411200,
            "name": "三门峡市"
          },
          {
            "id": 350400,
            "name": "三明市"
          },
          {
            "id": 460300,
            "name": "三沙市"
          },
          {
            "id": 460200,
            "name": "三亚市"
          },
          {
            "id": 542200,
            "name": "山南地区"
          },
          {
            "id": 440500,
            "name": "汕头市"
          },
          {
            "id": 441500,
            "name": "汕尾市"
          },
          {
            "id": 611000,
            "name": "商洛市"
          },
          {
            "id": 411400,
            "name": "商丘市"
          },
          {
            "id": 310100,
            "name": "上海市"
          },
          {
            "id": 361100,
            "name": "上饶市"
          },
          {
            "id": 440200,
            "name": "韶关市"
          },
          {
            "id": 430500,
            "name": "邵阳市"
          },
          {
            "id": 330600,
            "name": "绍兴市"
          },
          {
            "id": 440300,
            "name": "深圳市"
          },
          {
            "id": 429021,
            "name": "神农架林区"
          },
          {
            "id": 210100,
            "name": "沈阳市"
          },
          {
            "id": 420300,
            "name": "十堰市"
          },
          {
            "id": 659001,
            "name": "石河子市"
          },
          {
            "id": 130100,
            "name": "石家庄市"
          },
          {
            "id": 640200,
            "name": "石嘴山市"
          },
          {
            "id": 659007,
            "name": "双河市"
          },
          {
            "id": 230500,
            "name": "双鸭山市"
          },
          {
            "id": 140600,
            "name": "朔州市"
          },
          {
            "id": 220300,
            "name": "四平市"
          },
          {
            "id": 220700,
            "name": "松原市"
          },
          {
            "id": 320500,
            "name": "苏州市"
          },
          {
            "id": 321300,
            "name": "宿迁市"
          },
          {
            "id": 341300,
            "name": "宿州市"
          },
          {
            "id": 421300,
            "name": "随州市"
          },
          {
            "id": 231200,
            "name": "绥化市"
          },
          {
            "id": 510900,
            "name": "遂宁市"
          }
        ]
      },
      {
        "letter": "T",
        "data": [
          {
            "id": 654200,
            "name": "塔城地区"
          },
          {
            "id": 710100,
            "name": "台北市"
          },
          {
            "id": 713400,
            "name": "台东县"
          },
          {
            "id": 710500,
            "name": "台南市"
          },
          {
            "id": 710400,
            "name": "台中市"
          },
          {
            "id": 331000,
            "name": "台州市"
          },
          {
            "id": 370900,
            "name": "泰安市"
          },
          {
            "id": 321200,
            "name": "泰州市"
          },
          {
            "id": 140100,
            "name": "太原市"
          },
          {
            "id": 130200,
            "name": "唐山市"
          },
          {
            "id": 712300,
            "name": "桃园县"
          },
          {
            "id": 120100,
            "name": "天津市"
          },
          {
            "id": 429006,
            "name": "天门市"
          },
          {
            "id": 620500,
            "name": "天水市"
          },
          {
            "id": 211200,
            "name": "铁岭市"
          },
          {
            "id": 659006,
            "name": "铁门关市"
          },
          {
            "id": 220500,
            "name": "通化市"
          },
          {
            "id": 150500,
            "name": "通辽市"
          },
          {
            "id": 610200,
            "name": "铜川市"
          },
          {
            "id": 340700,
            "name": "铜陵市"
          },
          {
            "id": 520600,
            "name": "铜仁市"
          },
          {
            "id": 659003,
            "name": "图木舒克市"
          },
          {
            "id": 652100,
            "name": "吐鲁番地区"
          },
          {
            "id": 469022,
            "name": "屯昌县"
          }
        ]
      },
      {
        "letter": "U",
        "data": []
      },
      {
        "letter": "V",
        "data": []
      },
      {
        "letter": "W",
        "data": [
          {
            "id": 469006,
            "name": "万宁市"
          },
          {
            "id": 371000,
            "name": "威海市"
          },
          {
            "id": 370700,
            "name": "潍坊市"
          },
          {
            "id": 610500,
            "name": "渭南市"
          },
          {
            "id": 330300,
            "name": "温州市"
          },
          {
            "id": 469005,
            "name": "文昌市"
          },
          {
            "id": 532600,
            "name": "文山壮族苗族自治州"
          },
          {
            "id": 150300,
            "name": "乌海市"
          },
          {
            "id": 150900,
            "name": "乌兰察布市"
          },
          {
            "id": 650100,
            "name": "乌鲁木齐市"
          },
          {
            "id": 320200,
            "name": "无锡市"
          },
          {
            "id": 340200,
            "name": "芜湖市"
          },
          {
            "id": 450400,
            "name": "梧州市"
          },
          {
            "id": 640300,
            "name": "吴忠市"
          },
          {
            "id": 420100,
            "name": "武汉市"
          },
          {
            "id": 620600,
            "name": "武威市"
          },
          {
            "id": 659004,
            "name": "五家渠市"
          },
          {
            "id": 469001,
            "name": "五指山市"
          }
        ]
      },
      {
        "letter": "X",
        "data": [
          {
            "id": 610100,
            "name": "西安市"
          },
          {
            "id": 630100,
            "name": "西宁市"
          },
          {
            "id": 532800,
            "name": "西双版纳傣族自治州"
          },
          {
            "id": 611100,
            "name": "西咸新区"
          },
          {
            "id": 152500,
            "name": "锡林郭勒盟"
          },
          {
            "id": 350200,
            "name": "厦门市"
          },
          {
            "id": 429004,
            "name": "仙桃市"
          },
          {
            "id": 421200,
            "name": "咸宁市"
          },
          {
            "id": 610400,
            "name": "咸阳市"
          },
          {
            "id": 810100,
            "name": "香港岛"
          },
          {
            "id": 420600,
            "name": "襄阳市"
          },
          {
            "id": 430300,
            "name": "湘潭市"
          },
          {
            "id": 433100,
            "name": "湘西土家族苗族自治州"
          },
          {
            "id": 420900,
            "name": "孝感市"
          },
          {
            "id": 710800,
            "name": "新北市"
          },
          {
            "id": 810300,
            "name": "新界"
          },
          {
            "id": 410700,
            "name": "新乡市"
          },
          {
            "id": 360500,
            "name": "新余市"
          },
          {
            "id": 710600,
            "name": "新竹市"
          },
          {
            "id": 712400,
            "name": "新竹县"
          },
          {
            "id": 140900,
            "name": "忻州市"
          },
          {
            "id": 411500,
            "name": "信阳市"
          },
          {
            "id": 152200,
            "name": "兴安盟"
          },
          {
            "id": 130500,
            "name": "邢台市"
          },
          {
            "id": 320300,
            "name": "徐州市"
          },
          {
            "id": 411000,
            "name": "许昌市"
          },
          {
            "id": 341800,
            "name": "宣城市"
          }
        ]
      },
      {
        "letter": "Y",
        "data": [
          {
            "id": 511800,
            "name": "雅安市"
          },
          {
            "id": 370600,
            "name": "烟台市"
          },
          {
            "id": 320900,
            "name": "盐城市"
          },
          {
            "id": 610600,
            "name": "延安市"
          },
          {
            "id": 222400,
            "name": "延边朝鲜族自治州"
          },
          {
            "id": 321000,
            "name": "扬州市"
          },
          {
            "id": 441700,
            "name": "阳江市"
          },
          {
            "id": 140300,
            "name": "阳泉市"
          },
          {
            "id": 230700,
            "name": "伊春市"
          },
          {
            "id": 654000,
            "name": "伊犁哈萨克自治州"
          },
          {
            "id": 511500,
            "name": "宜宾市"
          },
          {
            "id": 420500,
            "name": "宜昌市"
          },
          {
            "id": 360900,
            "name": "宜春市"
          },
          {
            "id": 712200,
            "name": "宜兰县"
          },
          {
            "id": 430900,
            "name": "益阳市"
          },
          {
            "id": 640100,
            "name": "银川市"
          },
          {
            "id": 360600,
            "name": "鹰潭市"
          },
          {
            "id": 210800,
            "name": "营口市"
          },
          {
            "id": 431100,
            "name": "永州市"
          },
          {
            "id": 610800,
            "name": "榆林市"
          },
          {
            "id": 450900,
            "name": "玉林市"
          },
          {
            "id": 632700,
            "name": "玉树藏族自治州"
          },
          {
            "id": 530400,
            "name": "玉溪市"
          },
          {
            "id": 430600,
            "name": "岳阳市"
          },
          {
            "id": 445300,
            "name": "云浮市"
          },
          {
            "id": 712900,
            "name": "云林县"
          },
          {
            "id": 140800,
            "name": "运城市"
          }
        ]
      },
      {
        "letter": "Z",
        "data": [
          {
            "id": 370400,
            "name": "枣庄市"
          },
          {
            "id": 440800,
            "name": "湛江市"
          },
          {
            "id": 712700,
            "name": "彰化县"
          },
          {
            "id": 350600,
            "name": "漳州市"
          },
          {
            "id": 430800,
            "name": "张家界市"
          },
          {
            "id": 130700,
            "name": "张家口市"
          },
          {
            "id": 620700,
            "name": "张掖市"
          },
          {
            "id": 530600,
            "name": "昭通市"
          },
          {
            "id": 441200,
            "name": "肇庆市"
          },
          {
            "id": 321100,
            "name": "镇江市"
          },
          {
            "id": 410100,
            "name": "郑州市"
          },
          {
            "id": 442000,
            "name": "中山市"
          },
          {
            "id": 640500,
            "name": "中卫市"
          },
          {
            "id": 331200,
            "name": "舟山群岛新区"
          },
          {
            "id": 330900,
            "name": "舟山市"
          },
          {
            "id": 411600,
            "name": "周口市"
          },
          {
            "id": 440400,
            "name": "珠海市"
          },
          {
            "id": 430200,
            "name": "株洲市"
          },
          {
            "id": 411700,
            "name": "驻马店市"
          },
          {
            "id": 512000,
            "name": "资阳市"
          },
          {
            "id": 370300,
            "name": "淄博市"
          },
          {
            "id": 510300,
            "name": "自贡市"
          },
          {
            "id": 520300,
            "name": "遵义市"
          }
        ]
      }
    ]

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个完整的 Vue 组件代码实现: ```html <template> <div> <div v-for="(contacts, letter) in groupedContacts" :key="letter"> <h2>{{ letter }}</h2> <ul> <li v-for="contact in contacts" :key="contact.phone">{{ contact.name }}</li> </ul> </div> </div> </template> <script> import pinyin from 'pinyin'; export default { data() { return { contacts: [ { name: '张三', phone: '123456789' }, { name: '李四', phone: '987654321' }, { name: '王五', phone: '111111111' }, { name: '赵六', phone: '222222222' }, { name: '钱七', phone: '333333333' }, { name: '孙八', phone: '444444444' }, { name: '周九', phone: '555555555' }, { name: '吴十', phone: '666666666' }, ], groupedContacts: {}, }; }, mounted() { const pinyinContacts = this.contacts.map(contact => { const pinyinName = pinyin(contact.name, { style: pinyin.STYLE_FIRST_LETTER }).join(''); return { ...contact, pinyinName }; }); const groupedContacts = pinyinContacts.reduce((groups, contact) => { const firstLetter = contact.pinyinName[0].toUpperCase(); if (!groups[firstLetter]) { groups[firstLetter] = []; } groups[firstLetter].push(contact); return groups; }, {}); Object.keys(groupedContacts).forEach(key => { groupedContacts[key].sort((a, b) => a.name.localeCompare(b.name)); }); this.groupedContacts = groupedContacts; }, }; </script> ``` 在这个示例中,我们使用了 pinyin 库将联系人名字转换为拼音,然后根据拼音首字母进行分组排序,并最终在页面上渲染出分组后的通讯录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值