地址解析(仅供参考与学习)<Java>

JAVA实现地址解析功能地址解析步骤如下:1、检查是否存在省份2、如果存在省份,将会检查省份是否明确标注省,自治区,市(直辖市),特别行政区的关键字3、自动判断市级地区是否注明市的关键字,如果没有标注,将会自动拼接上市的关键字,部分特殊情况不需要拼接,例如:xxx自治州,xxx自治县,xxx州,xxx盟,xxx地区;并且针对直辖市进行特殊处理,由于直辖市没有市级,将会给直辖市默认拼接市辖区...
摘要由CSDN通过智能技术生成
地址解析步骤如下:

1、检查是否存在省份
2、如果存在省份,将会检查省份是否明确标注省,自治区,市(直辖市),特别行政区的关键字,如果不存在,将会自动拼接上,便于后边正则匹配
3、检查市级地区是否明确标注关键字,如果没有标注,将会自动拼接上,如果市级地址中包含州,盟,自治州等特殊情况的市级地区,将不会进行自动拼接(注:由于给出的公共的市级地区没有明确区分是市还是州或者是县,因此如果没有在地址中明确,将会统一拼接成市
4、通过正则表达式将重构后的地址进行分割

待分割地址:四川成都高新区xxx地址
分割后结果:
1、四川省
2,成都市
3,高新区
4,xxx地址

5、将地址中存在重复的部分进行去重,保留唯一的省市区地址

第一,定义公用的对象,在各个不同的步骤中会相应的使用到
    /**
     * 省级后缀
     */
    private static String[] suffixs = {"省","市","自治区","特别行政区"}; 
    /**
     * 中国34个省,直辖市,自治区,特别行政区
     */
    @SuppressWarnings("serial")
	private static Map<Integer,String[]> maps = new HashMap<Integer,String[]>(){
  {
		/**
		 * 中国的23个省
		 */
		put(1, new String[]{"河北","山西","辽宁","吉林","黑龙江","江苏","浙江","安徽","福建","江西","山东","河南","湖北","湖南","广东","海南","四川","贵州","云南","陕西","甘肃","青海","台湾"});
		/**
		 * 中国的4个直辖市
		 */
		put(2, new String[]{"北京","天津","上海","重庆"});
		/**
		 * 中国的5个自治区
		 */
		put(3, new String[]{"广西","内蒙古","西藏","宁夏","新疆"});
		/**
		 * 中国的2个特别行政区
		 */
		put(4, new String[]{"香港","澳门"});
		/**
		 * 中国的市
		 */
		put(5, new String[]{"石家庄","唐山","秦皇岛","邯郸","邢台","保定","张家口","承德","沧州","廊坊","衡水",
    			"太原","大同","阳泉","长治","晋城","朔州","晋中","运城","忻州","临汾","吕梁",
    			"呼和浩特","包头","乌海","赤峰","通辽","鄂尔多斯","呼伦贝尔","巴彦淖尔","乌兰察布","兴安","锡林郭勒","阿拉善",
    			"沈阳","大连","鞍山","抚顺","本溪","丹东","锦州","营口","阜新","辽阳","盘锦","铁岭","朝阳","葫芦岛",
    			"长春","吉林","四平","辽源","通化","白山","松原","白城","延边",
    			"哈尔滨","齐齐哈尔","鸡西","鹤岗","双鸭山","大庆","伊春","佳木斯","七台河","牡丹江","黑河","绥化","大兴安岭",
    			"南京","无锡","徐州","常州","苏州","南通","连云港","淮安","盐城","扬州","镇江","泰州","宿迁",
    			"杭州","宁波","温州","嘉兴","湖州","绍兴","金华","衢州","舟山","台州","丽水",
    			"合肥","芜湖","蚌埠","淮南","马鞍山","淮北","铜陵","安庆","黄山","滁州","阜阳","宿州","巢湖","六安","亳州","池州","宣城",
    			"福州","厦门","莆田","三明","泉州","漳州","南平","龙岩","宁德",
    			"南昌","景德镇","萍乡","九江","新余","鹰潭","赣州","吉安","宜春","抚州","上饶",
    			"济南","青岛","淄博","枣庄","东营","烟台","潍坊","威海","济宁","泰安","日照","莱芜","临沂","德州","聊城","滨州","菏泽",
    			"郑州","开封","洛阳","平顶山","焦作","鹤壁","新乡","安阳","濮阳","许昌","漯河","三门峡","南阳","商丘","信阳","周口","驻马店",
    			"武汉","黄石","襄樊","十堰","荆州","宜昌","荆门","鄂州","孝感","黄冈","咸宁","随州","恩施",
    			"长沙","株洲","湘潭","衡阳","邵阳","岳阳","常德","张家界","益阳","郴州","永州","怀化","娄底","湘西",
    			"广州","深圳","珠海","汕头","韶关","佛山","江门","湛江","茂名","肇庆","惠州","梅州","汕尾","河源","阳江","清远","东莞","中山","潮州","揭阳","云浮",
    			"南宁","柳州","桂林","梧州","北海","防城港","钦州","贵港","玉林",
  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
您可以使用Java Stream API来对List<TestAlertFileSystem>进行聚合,然后将结果转换为前端能解析的三级树形层级结构。具体步骤如下: 1. 使用Java Stream API对List<TestAlertFileSystem>进行按属性znywCurrFlowUserName、lifeStatus、currentCapacity聚合。例如,以下代码将List<TestAlertFileSystem>按znywCurrFlowUserName、lifeStatus、currentCapacity属性进行聚合: ``` Map<String, Map<String, Map<String, List<TestAlertFileSystem>>>> groupedData = list.stream() .collect(Collectors.groupingBy(TestAlertFileSystem::getZnywCurrFlowUserName, Collectors.groupingBy(TestAlertFileSystem::getLifeStatus, Collectors.groupingBy(TestAlertFileSystem::getCurrentCapacity)))); ``` 2. 将聚合后的数据转换为前端能解析的三级树形层级结构。例如,以下代码将聚合后的数据转换为前端能解析的三级树形层级结构: ``` List<Map<String, Object>> treeData = new ArrayList<>(); for (Map.Entry<String, Map<String, Map<String, List<TestAlertFileSystem>>>> entry1 : groupedData.entrySet()) { Map<String, Object> level1 = new HashMap<>(); level1.put("label", entry1.getKey()); List<Map<String, Object>> level2List = new ArrayList<>(); for (Map.Entry<String, Map<String, List<TestAlertFileSystem>>> entry2 : entry1.getValue().entrySet()) { Map<String, Object> level2 = new HashMap<>(); level2.put("label", entry2.getKey()); List<Map<String, Object>> level3List = new ArrayList<>(); for (Map.Entry<String, List<TestAlertFileSystem>> entry3 : entry2.getValue().entrySet()) { Map<String, Object> level3 = new HashMap<>(); level3.put("label", entry3.getKey()); level3.put("data", entry3.getValue()); level3List.add(level3); } level2.put("children", level3List); level2List.add(level2); } level1.put("children", level2List); treeData.add(level1); } ``` 其中,groupedData是聚合后的Map对象,treeData是转换后的前端能解析的三级树形层级结构。在转换过程中,我们遍历groupedData的每一层,将其转换为对应的Map对象,然后将其添加到treeData中,最终得到前端能解析的三级树形层级结构。 注意,以上代码仅供参考,具体实现可能因数据结构和业务需求的不同而有所差异。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值