有個map,key值是code,value是金額,想經過下級code得到上級code的金額。例以下圖:java
00的value的和等於0001+0002的和,依次類推。spa
代碼:code
package com.iss.itms.budgetmanage.budgeting.budgetimport; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.Map.Entry; public class newSum { public static void main(String[] args) { Map map =new HashMap(); Map sumByCode = sumByCode(map); System.out.println("---節點求和後的數據"+sumByCode.toString()); } /** * 得到對應項目編號的金額數據 * @param column6 * @param column8 * @return */ private static Map sumByCode(Map sumByProjectCode){ sumByProjectCode.put("00", null); sumByProjectCode.put("0001", 3); sumByProjectCode.put("0002", 3); sumByProjectCode.put("01", null); sumByProjectCode.put("0101", 4); sumByProjectCode.put("0102", 5); sumByProjectCode.put("0102", null); sumByProjectCode.put("010201", 2); sumByProjectCode.put("010202", 3); //對map進行降序排序 Map<String, String> sortMap = sortMapByKey(sumByProjectCode); //一下是爲了key值在循環的時候能進行remove操做進行的賦值操做 Set<String> keySet = sortMap.keySet(); Set<String> keySet2 = new HashSet<String>(); keySet2.addAll(keySet); List<String> list = new ArrayList<String>(keySet2); Collections.sort(list); //迭代能夠值得到和值 for(Entry<String, String> entry : sortMap.entrySet()){ String key = entry.getKey(); Set set=new HashSet(); int sum=0; Object[] array = list.toArray(); for(int i=array.length-1;i>0;i--){ String key2=array[i].toString(); String regex=key+"\\d+"; if (key2.matches(regex)) { set.add(key2); //有下級項目類型,就去下級項目金額和,不加本機的金額 sum+=Integer.parseInt(sortMap.get(key2)); }else if(key2.length()<=key.length()){ continue; }else { break; } } if (set.size()!=0) { list.removeAll(set); } //沒有下級值才取本身的值信息 if (sum==0) { sum=Integer.parseInt(String.valueOf(sortMap.get(key))); } sortMap.put(key, String.valueOf(sum)); } return sortMap; } /** * 使用 Map按key進行排序 * @param map * @return */ public static Map<String, String> sortMapByKey(Map<String, String> map) { if (map == null || map.isEmpty()) { return null; } Map<String, String> sortMap = new TreeMap<String, String>( new MapKeyComparator()); sortMap.putAll(map); return sortMap; } } class MapKeyComparator implements Comparator<String>{ public int compare(String str1, String str2) { return str2.compareTo(str1);//調換可實現正序倒序 } }
輸出爲:blog
---節點求和後的數據{010202=3, 010201=2, 0102=5, 0101=4, 01=9, 0002=3, 0001=3, 00=6}排序