我坚持比较价值观。数组列表由两个对象Name和Percentage组成。
public class DataModel {
private String name;
private String dataUsagePercent;
int color;
}
和数组列表是
List<DataModel> usageList;
Collections.sort(usageList, new Comparator<DataModel>(){
public int compare(DataModel d1, DataModel d2){
return (d1.getDataUsagePercent()) - Integer.parseInt(d2.getDataUsagePercent()));
}
});
示例:
arraylist中的dataUsagePercent值为2, 10, 40, 30, 50, 60, 90, 65,55,100.
我必须比较dataUsagePercent
的值。在arraylist和前四个类别中,最低位置应该排在第0位
它构成了dataUsagePercent的最高值。此外,剩下的六个值(构成最低使用百分比)
合并为一个百分比。
比较列表后上述值的输出应包括:
2,10+30+40+50+55+60,65,90,100 means 2, 245,65,90,100
最终列表大小应始终为5,名称值无影响
编辑:错过60.添加到合并值
答案 0 :(得分:0)
我认为您的列表数据类型需要更改为List<DataUsageModel> usageList;
比较dataUsagePercent值,您可以使用Collections.sort(usageList);
或者您可以使用priority queue
答案 1 :(得分:0)
首先,按dataUsagePercent
订购列表:
usageList.sort(
Comparator.comparing(
DataModel::getDataUsagePercent,
Comparator.comparingInt(Integer::parseInt)));
我在这里使用List.sort
和Comparator.comparing
方法。
然后,我会使用一个通用的for循环来进行分组,处理索引:
int[] topFive = new int[5];
int size = usageList.size();
for (int i = 0; i < size; i++) {
int value = Integer.parseInt(usageList.get(i).getDataUsagePercent());
if (i == 0) {
topFive[0] = value; // lowest value at the beginning
} else if (i > 0 && i < size - 3) {
topFive[1] += value; // accumulate intermediate values in 2nd position
} else {
topFive[i - size + 5] = value; // top values in the last 3 positions
}
}
输出为[2, 245, 65, 90, 100]
。
答案 2 :(得分:0)
首先,我会对列表进行排序:
Collections.sort(usageList, new Comparator<DataModel>(){
public int compare(DataModel d1, DataModel d2){
return Integer.compare(d1.getDataUsagePercent(), d2.getDataUsagePercent());
}
});