基于对象的ArrayList对值进行排序

时间:2017-04-20 16:43:41

标签: java list sorting arraylist

我坚持比较价值观。数组列表由两个对象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.添加到合并值

3 个答案:

答案 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.sortComparator.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());
    }
});
  • 之后你可以拿第一个元素和最后一个元素。
  • 将中间值加在一起
  • 并创建结果数组