需求:简化以下代码
简化代码!简化代码!代码简化!
以下代码解决的问题:返回一个result(Map类型)。result需要包含最大最小和总加值。
已知:给出一个List<Map<String, String>> 类型,其中map 一般是包含两个属性。一个是“id”,一个是“value”。
注:map 中可能没有value属性,可能value属性是空字符串。给出的List<Map<String, String>> maps 也需要判空
说明:给出的List<Map<String, String>> maps 的size 为几百到一千不等
实际开发中 需要求多个List<Map<String, String>> 的最大最小值,故想简化代码
问题相关代码,请勿粘贴截图
public class Test {
public static void main(String[] args) {
System.out.println(doMethod());
}
public static Map<String ,String> doMethod(){
List<Map<String, String>> maps = generator();
Map result=new HashMap();
if(CollectionUtils.isEmpty(maps)){
result.put("max","");
result.put("min","");
result.put("sum","");
return result;
}
BigDecimal max= maps.stream()
.filter(x -> StringUtils.isNotBlank(x.get("value")))//过滤掉没有value属性的和value属性为空字符串的
.map(x -> new BigDecimal(x.get("value")))
.max(BigDecimal::compareTo).get();
BigDecimal min=maps.stream()
.filter(x -> StringUtils.isNotBlank(x.get("value")))//过滤掉没有value属性的和value属性为空字符串的
.map(x -> new BigDecimal(x.get("value")))
.min(BigDecimal::compareTo).get();
BigDecimal sum=maps.stream()
.filter(x -> StringUtils.isNotBlank(x.get("value")))//过滤掉没有value属性的和value属性为空字符串的
.map(x -> new BigDecimal(x.get("value")))
.reduce(BigDecimal.ZERO,BigDecimal::add);
result.put("max",max);
result.put("min",min);
result.put("sum",sum);
return result;
}
//生成样本数据
public static List<Map<String,String>> generator2(){
return new ArrayList<>();
}
public static List<Map<String,String>> generator(){
//有些map 中没有value的属性,也有可能是空字符串
Map<String,String> map1=new HashMap();
map1.put("id","1");
map1.put("value","1.1");
Map<String,String> map2=new HashMap();
map2.put("id","1");
map2.put("value","1.2");
Map<String,String> map3=new HashMap();
map3.put("id","1");
map3.put("value","");
Map<String,String> map4=new HashMap();
map4.put("id","1");
Map<String,String> map5=new HashMap();
map5.put("id","1");
map5.put("value","1.5");
return Lists.newArrayList(map1,map2,map3,map4,map5);
}
}