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里面
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里面
这里的父级是啥意思?比如你题目中出现的
a1 = 1
a1b1 = 11
a1b1c1 = 111我找到a1b1c1 = 111后,其父级是指a1b1 = 11,还是指以后的b1=1 ?
同理,其再父级(a)是指只有"a",如a1 = 1 ,还是包括"a",如a1b1 = 11 ???
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对?
如果有的话,我觉得你这像是一个三层树型菜单的数据存储结构!
======
这个a[3]数组是什么东西?
2).我在8楼中紫色部分,你实际中有还是没有?
a1 = 1
a1b1 = 11
a1b1c1 = 111
a1放到a[0] a1b1放到a[1] a1b1c1放到a[2]
因为 a1下面可以有a1b2,a1b3...而a1b2下面可能有a1b2c1,a1b2c2...
所以说要多个数组,每一次把数组放到list里面
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();
}
}
其余的以此类推。
如果是这样,还真有点繁琐。
我想看看大家是怎么做的...我可以借鉴一下
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里面的