62,634
社区成员




import java.util.ArrayList;
import java.util.List;
public class Record {
/**
* 级别
*/
private int level;
/**
* 编号
*/
private int number;
/**
* 名称
*/
private String name;
/**
* 规格
*/
private String standard;
/**
* 单位
*/
private String unit;
/**
* 数量
*/
private int quantity;
public Record() { }
public Record(int level, int number, String name, String standard, String unit, int quantity) {
this.level = level;
this.number = number;
this.name = name;
this.standard = standard;
this.unit = unit;
this.quantity = quantity;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStandard() {
return standard;
}
public void setStandard(String standard) {
this.standard = standard;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public static void main(String[] args) {
// 1. 初始化数据
List<Record> records = new ArrayList<>();
records.add(new Record(1,1,"1","1","套", 0));
records.add(new Record(2,2,"2","2","套", 1));
records.add(new Record(3,3,"3","3","套", 1));
records.add(new Record(3,4,"4","4","个", 2));
records.add(new Record(2,5,"5","5","个", 1));
records.add(new Record(2,6,"6","6","套", 1));
records.add(new Record(3,7,"7","7","个", 1));
records.add(new Record(3,8,"8","8","个", 4));
records.add(new Record(3,9,"9","9","套", 1));
records.add(new Record(4,10,"10","10","套", 1));
records.add(new Record(4,11,"11","11","克", 0));
records.add(new Record(3,12,"12","12","套", 1));
records.add(new Record(4,13,"13","13","克", 0));
records.add(new Record(2,14,"14","14","个", 1));
records.add(new Record(3,15,"15","15","套", 1));
records.add(new Record(4,16,"16","16","克", 0));
records.add(new Record(3,17,"17","17","套", 1));
records.add(new Record(4,18,"18","18","克", 0));
records.add(new Record(5,19,"19","19","克", 0));
records.add(new Record(5,20,"20","20","克", 0));
records.add(new Record(4,21,"21","21","克", 0));
records.add(new Record(3,22,"22","22","套", 1));
records.add(new Record(2,23,"23","23","个", 1));
//2. 获取最大级别和最小级别
int minLevel = 1, maxLevel = 1;
for (Record record : records) {
minLevel = minLevel > record.getLevel() ? record.getLevel() : minLevel;
maxLevel = maxLevel < record.getLevel() ? record.getLevel() : maxLevel;
}
//3. 按照级别分组
List<List<Record>> groups = new ArrayList<>();
for (int level = minLevel; level < maxLevel; level++) {
List<Record> group = null;
for (Record record : records) {
if (group == null) {
group = new ArrayList<>();
}
if (record.getLevel() == level) {
if (group.isEmpty()) {
group.add(record);
} else if (group.get(group.size()-1).getLevel() == level) {
group.clear();
group.add(record);
} else {
groups.add(group);
group = new ArrayList<>();
group.add(record);
}
continue;
}
if (record.getLevel() == level+1) {
group.add(record);
}
}
if (group != null && group.size()>1) {
groups.add(group);
}
group = null;
}
//4. 打印输出
for (List<Record> group : groups) {
for (Record record : group) {
System.out.println(String.format("%2d %2d %2s %2s %s %2d",
record.getLevel(), record.getNumber(), record.getName(),
record.getStandard(), record.getUnit(), record.getQuantity()));
}
System.out.println();
}
}
}
输出结果: 1 1 1 1 套 0
2 2 2 2 套 1
2 5 5 5 个 1
2 6 6 6 套 1
2 14 14 14 个 1
2 23 23 23 个 1
2 2 2 2 套 1
3 3 3 3 套 1
3 4 4 4 个 2
2 6 6 6 套 1
3 7 7 7 个 1
3 8 8 8 个 4
3 9 9 9 套 1
3 12 12 12 套 1
2 14 14 14 个 1
3 15 15 15 套 1
3 17 17 17 套 1
3 22 22 22 套 1
3 9 9 9 套 1
4 10 10 10 套 1
4 11 11 11 克 0
3 12 12 12 套 1
4 13 13 13 克 0
3 15 15 15 套 1
4 16 16 16 克 0
3 17 17 17 套 1
4 18 18 18 克 0
4 21 21 21 克 0
4 18 18 18 克 0
5 19 19 19 克 0
5 20 20 20 克 0
// 首先要把数据处理成这个map key=>级别 value=>表里的行索引
private static Map<Integer, List<Integer>> ALL_DATA = null;
// 你的数据
private static List<List<String>> Lists = new ArrayList<List<String>>();
private static void recursion(Integer level, Integer rowIndex) {
Integer nextLevel = level + 1;
if (CollectionUtils.isNotEmpty(ALL_DATA.get(nextLevel))) {
List<Integer> levleList = ALL_DATA.get(level);
if (levleList.size() - 1 == levleList.indexOf(rowIndex)) {
// todo 拿到他级别下的下一级别,输出
} else {
Integer nextRowIndex = levleList.get(levleList.indexOf(rowIndex) + 1);
List<Integer> newLevleList = ALL_DATA.get(nextLevel);
// 筛选出该级别下的下一级别的表的行索引
List<Integer> collect = newLevleList.stream().filter(a -> a > rowIndex && a < nextRowIndex).collect(Collectors.toList());
// todo 输出
}
for (int i = 0; i < ALL_DATA.get(nextLevel).size(); i++) {
recursion(nextLevel, i);
}
}
}