81,122
社区成员




public class EntityField {
private String fieldName;
private String fieldType;
}
一个List<EntityField> list中有多个EntityField,如下:
EntityField ef1 = new EntityField();
ef1.setFieldName("ef1");
ef1.setFieldType("VARCHAR");
EntityField ef2 = new EntityField();
ef2.setFieldName("ef2");
ef2.setFieldType("LONGTEXT");
EntityField ef3 = new EntityField();
ef3.setFieldName("ef3");
ef3.setFieldType("VARCHAR");
EntityField ef4 = new EntityField();
ef4.setFieldName("ef4");
ef4.setFieldType("VARCHAR");
EntityField ef5 = new EntityField();
ef5.setFieldName("ef5");
ef5.setFieldType("LONGTEXT");
EntityField ef6 = new EntityField();
ef6.setFieldName("ef6");
ef6.setFieldType("VARCHAR");
List<EntityField> list = new ArrayList<EntityField>();
list.add(ef1);
list.add(ef2);
list.add(ef3);
list.add(ef4);
list.add(ef5);
list.add(ef6);
import java.util.*;
public class ListGroup{
public static void main(String[] args){
List<EntityField> listEntity = initListEntity();
List<List<EntityField>> list = group(listEntity);
dispList(list);
}
//初始化原始容器内容
//
public static List<EntityField> initListEntity(){
List<EntityField> list1 = new ArrayList<EntityField>();
EntityField ef1 = new EntityField();
ef1.setFieldName("ef1");
ef1.setFieldType("VARCHAR");
EntityField ef2 = new EntityField();
ef2.setFieldName("ef2");
ef2.setFieldType("LONGTEXT");
EntityField ef3 = new EntityField();
ef3.setFieldName("ef3");
ef3.setFieldType("VARCHAR");
EntityField ef4 = new EntityField();
ef4.setFieldName("ef4");
ef4.setFieldType("VARCHAR");
EntityField ef5 = new EntityField();
ef5.setFieldName("ef5");
ef5.setFieldType("LONGTEXT");
EntityField ef6 = new EntityField();
ef6.setFieldName("ef6");
ef6.setFieldType("VARCHAR");
list1.add(ef1);
list1.add(ef2);
list1.add(ef3);
list1.add(ef4);
list1.add(ef5);
list1.add(ef6);
return list1;
}
//用于分组的代码。
//
public static List<List<EntityField>> group(List<EntityField> list2){
List<List<EntityField>> listOut = new ArrayList<List<EntityField>>();
//把每个EntityField对象放一个List<EntityField>里,再把每个List<EntityField>
//放到List<List<EntityField>>里。
//
for(EntityField en:list2){
List<EntityField> listTemp = new ArrayList<EntityField>();
listTemp.add(en);
listOut.add(listTemp);
}
//遍历List<List<EntityField>>,对于里面的每个List<EntityField>,判断其EntityField
//内容,如果是LONGTEXT,保留;否则判断是否第一个,第一个保留,记录其位置,查找下一个,
//找到后,添加到第一个里,之后删除后面这个。注意索引值一定要减一。
//
boolean first = false;
int firstNon_LONGTEXT =0;
for(int i=0; i<listOut.size(); i++){
List<EntityField> listTemp = listOut.get(i);
if(listTemp.get(0).getFieldType().equals("LONGTEXT")){
continue;
}else if(first==false){
firstNon_LONGTEXT = i;//记录第一个非LONGTEXT对象位置。
first = true;
}else{
listOut.get(firstNon_LONGTEXT).add(listOut.remove(i).get(0));
first = false;
i--; //索引值回退一个。
}
}//end for
return listOut;
}//end group().
//显示分组后的容器内容
//
public static void dispList(List<List<EntityField>> list){
for(List<EntityField> listEntity:list){
for(EntityField ef:listEntity){
System.out.println(ef);
}
System.out.println("---------------");
}
}
}//end class ListGroup
class EntityField{
private String fieldName;
private String fieldType;
public EntityField(){
}
public void setFieldName(String fieldName){
this.fieldName = fieldName;
}
public void setFieldType(String fieldType){
this.fieldType = fieldType;
}
public String getFieldName(){
return fieldName;
}
public String getFieldType(){
return fieldType;
}
public String toString(){
return fieldName+" "+ fieldType;
}
}
private static List<List<EntityField>> toRowChildList(List<EntityField> list) {
List<List<EntityField>> l = new ArrayList<List<EntityField>>();
if (list == null)
return l;
List cList = new ArrayList();
for (int i = 0; i < list.size(); i++) {
EntityField ef1 = list.get(i);
if (ef1.getFieldType().equalsIgnoreCase("LONGTEXT")) {
cList = new ArrayList();
cList.add(ef1);
l.add(cList);
}
else if(cList.size()!=2)
cList.add(ef1);
else {
l.add(cList);
cList = new ArrayList();
}
}
l.add(cList);
return l;
}
private static List<List<EntityField>> toRowChildList(List<EntityField> list) {
List<List<EntityField>> l = new ArrayList<List<EntityField>>();
if (list == null)
return l;
for (int i = 0; i < list.size(); i++) {
List cList = new ArrayList();
cList.add(list.get(i));
l.add(cList);
}
for (int i = 0; i < l.size(); i++) {
List<EntityField> list1 = l.get(i);
EntityField ef = l.get(i).get(0);
if (!ef.getFieldType().equalsIgnoreCase("LONGTEXT")) {
for (int j = i + 1; j < l.size(); j++) {
EntityField ef1 = l.get(j).get(0);
if (!ef1.getFieldType().equalsIgnoreCase("LONGTEXT")) {
list1.add(ef1);
l.remove(l.get(j));
break;
}
}
}
}
return l;
}