如何从Array of Model类中获取min和max值,不包括零

时间:2017-08-14 10:21:00

标签: java android

[{
    "function": "Weight",
    "details": [{
            "date": "2017-07-24T00:00:00.000Z",
            "value": 0
        },
        {
            "date": "2017-07-25T00:00:00.000Z",
            "value": 0
        },
        {
            "date": "2017-07-26T00:00:00.000Z",
            "value": 30         },
        {
            "date": "2017-07-27T00:00:00.000Z",
            "value": 45
        },
        {
            "date": "2017-07-28T00:00:00.000Z",
            "value": 52
        },
        {
            "date": "2017-07-29T00:00:00.000Z",
            "value": 0
        },
        {
            "date": "2017-07-30T00:00:00.000Z",
            "value": 0
        }
    ]
   }]

这是我的josn数据我希望以这种方式得到我的最大值它在给定的对象数组中从数组中排除0值预期输出应该min:30和max 52我正在尝试下面的代码获取最大值和最小值:

public class VitalCompare implements Comparator<VitalReportsDetails> {
    @Override
    public int compare(VitalReportsDetails vitalReportsDetails, VitalReportsDetails t1) {
        int n1 = Integer.parseInt((vitalReportsDetails.getValue().equals("") ? "0" : vitalReportsDetails.getValue()));

        int n2 = Integer.parseInt((t1.getValue().equals("")? "0" : t1.getValue()));
        if (n1 >= n2 ) {
            return 1;
        }
        return -1;

    }

}

并且这样打电话:

String minValue = Collections.min(hm.get("Weight"), new VitalCompare()).getValue();
                int min = (minValue.equals("0") ? 0 : Integer.parseInt(minValue));
                customViewHolder.highlabel_text.setText(Integer.parseInt(Collections.max(hm.get("Weight"), new VitalCompare()).getValue()) + "Kg High | " + min + "Kg Low");

但每次我获得0分钟的价值时,请建议我如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

我会在计算您的聚合之前删除无效数据

ArrayList<VitalReportsDetails> details = new ArrayList<>();
for(VitalReportsDetails detail : hm.get("Weight")) {
    if(!detail.getValue().equals("0")) { details.add(detail); }
}

int min, max;
if(details.isEmpty()) {
    // No data => default values
    min = 0;
    max = 0;
} else {
    min = Integer.parseInt(Collections.min(details, new VitalCompare()).getValue());
    max = Integer.parseInt(Collections.max(details, new VitalCompare()).getValue());
}

在解析JSON时,您也可以直接将“value”设为int,以避免所有String-to-int转换。