一、需求描述
在为百分比饼图提供数据时,遇到一个问题:对于数据列表中过多的部分进行合并。
例如:
数据列表:
"氢气", "10%"
"氧气", "15%"
"氦气", "13%"
"一氧化碳", "7%"
"二氧化碳", "5%"
"颗粒物", "9%"
"一氧化硫", "11%"
"二氧化硫", "8%"
"氨气", "3%"
"氯气", "19%"
想要分为6个部分展示,把剩余的合并成一个 “其他”,“50%” 这样,即:
"氢气", "10%"
"氧气", "15%"
"氦气", "13%"
"一氧化碳", "7%"
"二氧化碳", "5%"
“其他”,“50%”
二、代码实现(没错,别废话,先看东西——怀念老罗的相声新品发布会,虽然我不是锤粉,哈哈)
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TestUpList {
private String item;
private String Num;
public static List<TestUpList> upList(List<TestUpList> inList, Integer num) {
List<TestUpList> resultList = new ArrayList<>();
int sum = 0;
for (int i = 0; i < inList.size(); i++) {
if (i < num - 1) {
resultList.add(inList.get(i));
} else {
sum += Integer.parseInt(inList.get(i).getNum().replace("%", ""));
}
}
TestUpList tmp = new TestUpList();
tmp.setItem("其它");
tmp.setNum(sum + "%");
resultList.add(tmp);
return resultList;
}
public static void main(String[] args) {
int num = 6;
List<TestUpList> testUpLists = new ArrayList<>();
testUpLists.add(new TestUpList("氢气", "10%"));
testUpLists.add(new TestUpList("氧气", "15%"));
testUpLists.add(new TestUpList("氦气", "13%"));
testUpLists.add(new TestUpList("一氧化碳", "7%"));
testUpLists.add(new TestUpList("二氧化碳", "5%"));
testUpLists.add(new TestUpList("颗粒物", "9%"));
testUpLists.add(new TestUpList("一氧化硫", "11%"));
testUpLists.add(new TestUpList("二氧化硫", "8%"));
testUpLists.add(new TestUpList("氨气", "3%"));
testUpLists.add(new TestUpList("氯气", "19%"));
System.out.println("处理前:");
testUpLists.forEach(System.out::println);
System.out.println("---------------------------");
System.out.println("处理后:");
upList(testUpLists, num).forEach(System.out::println);
}
}
原理很简单:
通过遍历构造个新的list,把大于展示数后面的部分累加后,添加到新list的最后。
绝对原创,有bug在所难免,欢迎来杠~~