a1     = 1
a1b1   = 11
a1b1c1 = 111
a1b1c2 = 112
a1b2c1 = 121
a1b3c1 = 131
a1b3c2 = 132
a1b3c3 = 133
a1b3c4 = 134
a1b3c5 = 135
a2     = 2
a2b1   = 21
a2b1c1 = 211
a2b1c2 = 212
a2b2c1 = 221
a2b3c1 = 231
a3     = 3
...  
anbncn = nnn
以上是map中k=v的形式(都是String类型);取出所有key中含有'c'的value以及其父级(b)的 value和再父级(a)的 value,放到a[3]数组中,再把每一个数组放到List里面

解决方案 »

  1.   

    “其父级(b)的 value和再父级(a)的 value”
    这里的父级是啥意思?比如你题目中出现的
    a1 = 1
    a1b1 = 11
    a1b1c1 = 111我找到a1b1c1 = 111后,其父级是指a1b1 = 11,还是指以后的b1=1  ?
    同理,其再父级(a)是指只有"a",如a1 = 1 ,还是包括"a",如a1b1 = 11   ???
      

  2.   

    楼主我想问一点:a1 = 1
    a1b1 = 11
    a1b1c1 = 111
    a1b1c2 = 112
    a1b2 = 12
    a1b2c1 = 121
    a1b3 = 13
    a1b3c1 = 131
    a1b3c2 = 132
    a1b3c3 = 133
    a1b3c4 = 134
    a1b3c5 = 135
    a2 = 2
    a2b1 = 21
    a2b1c1 = 211
    a2b1c2 = 212
    a2b2 = 22
    a2b2c1 = 221
    a2b3 = 23
    a2b3c1 = 231
    a3 = 3
    ... 
    an = n  
    anbncn = nnn
    你这堆数据中,有没有我加入的这几个k-v对?
    如果有的话,我觉得你这像是一个三层树型菜单的数据存储结构!
      

  3.   

    1).放到a[3]数组中,再把每一个数组放到List里面
    ======
    这个a[3]数组是什么东西?
    2).我在8楼中紫色部分,你实际中有还是没有?
      

  4.   

    楼主能不能举例把你a[0] a[1] a[2]的内容说说,你是要啥呢
      

  5.   

    例如:
    a1 = 1
    a1b1 = 11
    a1b1c1 = 111
    a1放到a[0] a1b1放到a[1] a1b1c1放到a[2]
    因为 a1下面可以有a1b2,a1b3...而a1b2下面可能有a1b2c1,a1b2c2...
    所以说要多个数组,每一次把数组放到list里面
      

  6.   

    看这是不是你想要的效果:
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    public class TestTree {
    private Map<String, String> treeMap=new HashMap<String, String>();
    private String[][] sArray;
    private List<String[]> listResult=new ArrayList<String[]>();

    public TestTree() {
    initMap(); 
    initArray();
    sortArray();
    }

    private void initMap(){ //顺序存放(可打乱顺序,也可自行添加(但只能加a..b..c..之类))
    // (a[0-9]+)(b[0-9]+){0,1}(c[0-9]+){0,1}
    treeMap.put("a1","1");
    treeMap.put("a1b1","11");
    treeMap.put("a1b1c1","111");
    treeMap.put("a1b1c2","112");
    treeMap.put("a1b2","12");
    treeMap.put("a1b2c1","121");
    treeMap.put("a1b3","13");
    treeMap.put("a1b3c1","131");
    treeMap.put("a1b3c2","132");
    treeMap.put("a1b3c3","133");
    treeMap.put("a1b3c4","134");
    treeMap.put("a1b3c5","135");
    treeMap.put("a2","2");
    treeMap.put("a2b1","21");
    treeMap.put("a2b1c1","211");
    treeMap.put("a2b1c2","212");
    treeMap.put("a2b2","22");
    treeMap.put("a2b2c1","221");
    treeMap.put("a2b3","23");
    treeMap.put("a2b3c1","231");
    }

    private void initArray(){//整理
    sArray=new String[treeMap.size()][2];
    Set<String> set=treeMap.keySet();
    Iterator<String> it=set.iterator();
    int i=0;
    while(it.hasNext()){
    String key=it.next();
    sArray[i][0]=key;
    sArray[i][1]=treeMap.get(key);
    i++;
    }
    }

    private void sortArray(){//排序
    int len=sArray.length;
    for(int i=0;i<len;i++){
    for(int j=0;j<i+1;j++){
    if(sArray[i][0].compareTo(sArray[j][0])<0){
    //交换key值
    String keyTemp=sArray[i][0];
    sArray[i][0]=sArray[j][0];
    sArray[j][0]=keyTemp;
    //同时交换value值
    String valueTemp=sArray[i][1];
    sArray[i][1]=sArray[j][1];
    sArray[j][1]=valueTemp;
    }
    }
    }
    }

    public void printArray(){ //打印数组
    int len=sArray.length;
    for(int i=0;i<len;i++){
    System.out.println(sArray[i][0]+"="+sArray[i][1]);
    }
    }


    //相关处理(需初始化及排序之后)
    public List<String[]> process(){
    String regex_a="(a[0-9]+)"; //创建正则表达式a(匹配a和一个以上的数字)
    String regex_ab=regex_a+"(b[0-9]+)"; //创建正则表达式ab(满足正则a同时'匹配b和一个以上的数字')
    String regex_abc=regex_ab+"(c[0-9]+)"; //创建正则表达式abc(满足正则ab同时'匹配c和一个以上的数字')
    int len=sArray.length;
    String bakA="";
    for(int i=0;i<len;){
    String[] arr=new String[3]; //a[3]数组
    if(sArray[i][0].matches(regex_a)){
    arr[2]=sArray[i][1];
    i++;
    bakA=arr[2];
    }
    if(sArray[i][0].matches(regex_ab)){
    arr[1]=sArray[i][1];
    i++;
    }

    arr[0]="";
    while(i<len && sArray[i][0].matches(regex_abc)){
    arr[0]=arr[0]+","+sArray[i][1]; //加分号分隔
    i++;
    }
    arr[0]=arr[0].replaceFirst(",", ""); //去除第一个逗号
    if(arr[2]==null){
    arr[2]=bakA; //如果当前循环未得到arr[2]值则取上次之值
    }
    listResult.add(arr);
    }

    return listResult;
    }


    public void printList(){
    int size=listResult.size();
    for(int i=0;i<size;i++){
    String[] a3=listResult.get(i);
    System.out.println(a3[0]+" -> "+a3[1]+" -> "+a3[2]);
    }
    }


    public static void main(String[] args) {
    TestTree t=new TestTree();
    // t.printArray();
    t.process();
    t.printList();
    }
    }
      

  7.   

    楼主说这是一个树形结构:是不是说a1,a2,a3......是同级的;然后a1下面有子节点a1b1,a1b2,a1b3;然后a1b1下面有子节点a1b1c1,a1b1c2;a1b2下面有子节点a1b2c1,a1b2c2;a1b3下面有子节a1b3c1,a1b3c2.
    其余的以此类推。
    如果是这样,还真有点繁琐。
      

  8.   

    你的理解是对的...我说了map里k-v都是字符串,其实就是字符串操作问题,主要用到indexOf(),subString(m,n)还有Map的遍历操作,我搞定了!
    我想看看大家是怎么做的...我可以借鉴一下
      

  9.   

    public List dirObjectList(Map map) {
    List list = new ArrayList();
    for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {
    FieldTitle fieldTitle = null;
    Map.Entry element = (Map.Entry) iter.next();
    String strKey1 = (String) element.getKey();
    if (strKey1.contains("b")) {
    String strKey11 = strKey1.substring(0, strKey1.lastIndexOf("b"));
    String[] srtValue1 = (String[]) map.get(strKey11);
    String strValue11 = "";
    for (int i = 0; i < srtValue1.length; i++) {
    strValue11 = srtValue1[i];
    }
    if (strKey1.contains("c")) {
    String strKey12 = strKey1.substring(0, strKey1.lastIndexOf("c"));
    String[] strValue2 = (String[]) map.get(strKey12);
    String strValue22 = "";
    for (int i = 0; i < strValue2.length; i++) {
    strValue22 = strValue2[i];
    }
    String[] strValue3 = (String[]) map.get(strKey1);
    String strValue33 = "";
    for (int i = 0; i < strValue3.length; i++) {
    strValue33 = strValue3[i];
    }
    fieldTitle = new FieldTitle();
    fieldTitle.setFirst(strValue11);
    fieldTitle.setSecond(strValue22);
    fieldTitle.setThree(strValue33);
    list.add(fieldTitle);
    } else {
    continue;
    }
    } else {
    continue;
    }
    }
    return list;
    }
    我把每一个一级 二级 三级 取出来之后放到JavaBean里面的