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

Java 基于对象的ArrayList对值进行排序,java,list,sorting,arraylist,Java,List,Sorting,Arraylist,我坚持比较价值观。数组列表由两个对象组成:名称和百分比 public class DataModel { private String name; private String dataUsagePercent; int color; } 数组列表是 List<DataModel> usageList; Collections.sort(usageList, new Comparator<DataModel>(){ p

我坚持比较价值观。数组列表由两个对象组成:名称和百分比

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()));
        }

    });
最终列表大小应始终仅为5,并且名称值没有影响


编辑:错过60。添加到组合值

我认为您的列表数据类型需要更改为
列表使用列表
要比较dataUsagePercent值,可以使用
Collections.sort(usageList)

或者您可以使用

我认为您的列表数据类型需要更改为
list usageList
要比较dataUsagePercent值,可以使用
Collections.sort(usageList)

或者您可以使用

首先,按
dataUsagePercent
对列表进行排序:

usageList.sort(
    Comparator.comparing(
        DataModel::getDataUsagePercent, 
        Comparator.comparingInt(Integer::parseInt)));
在这里,我使用的是数据和方法

然后,我将使用一个公共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
    }
}
int[]topFive=新的int[5];
int size=usageList.size();
对于(int i=0;i0&&i

输出是
[2,245,65,90,100]
首先,按
数据使用百分比对列表排序:

usageList.sort(
    Comparator.comparing(
        DataModel::getDataUsagePercent, 
        Comparator.comparingInt(Integer::parseInt)));
在这里,我使用的是数据和方法

然后,我将使用一个公共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
    }
}
int[]topFive=新的int[5];
int size=usageList.size();
对于(int i=0;i0&&i

输出是
[2,245,65,90,100]

首先我要对列表进行排序:

Collections.sort(usageList, new Comparator<DataModel>(){
    public int compare(DataModel d1, DataModel d2){
        return Integer.compare(d1.getDataUsagePercent(), d2.getDataUsagePercent());
    }
});
Collections.sort(usageList,newcomparator(){
公共整数比较(数据模型d1、数据模型d2){
返回整数.compare(d1.getDataUsagePercent(),d2.getDataUsagePercent());
}
});
  • 在那之后,你可以只取第一个元素和最后3个元素
  • 将中间值相加
  • 并创建结果数组

首先,我要对列表进行排序:

Collections.sort(usageList, new Comparator<DataModel>(){
    public int compare(DataModel d1, DataModel d2){
        return Integer.compare(d1.getDataUsagePercent(), d2.getDataUsagePercent());
    }
});
Collections.sort(usageList,newcomparator(){
公共整数比较(数据模型d1、数据模型d2){
返回整数.compare(d1.getDataUsagePercent(),d2.getDataUsagePercent());
}
});
  • 在那之后,你可以只取第一个元素和最后3个元素
  • 将中间值相加
  • 并创建结果数组

您可以创建另一个ArrayList并将所有百分比的副本放入其中,然后使用
Collections.sort(ArrayList)
。然后获取四个最高值和最低值,并将其余值相加。这是假设名称对百分比没有影响。您需要实现Compariable to use Collections.sort?值在哪里?它既不作为直接值出现在最终列表中,也不作为第五个值求和。如果没有,则立即添加。您可以创建另一个ArrayList并将所有百分比的副本放入其中,然后使用
集合。排序(ArrayList)
。然后获取四个最高值和最低值,并将其余值相加。这是假设名称对百分比没有影响。您需要实现Compariable to use Collections.sort?值在哪里?它既不是作为直接值出现在最终列表中,也不是求和形成第五个值。错过了,现在添加