[{
"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分钟的价值时,请建议我如何解决这个问题。
答案 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转换。