private HashMap<String, HashMap<String, Double>> getMinMaxThreshold(HashMap<String, Double> map) {
List<Double> threholds = map.values().stream().collect(Collectors.toList());
HashMap<String,Double >map1= this.sortByValues(map);
List<String> keys = map1.keySet().stream().collect(Collectors.toList());
Collections.sort(threholds);
Collections.reverse(threholds);
HashMap<String, HashMap<String,Double>> boudaries = new HashMap<>();
for (int i =0;i<=threholds.size();i++){
if(i==threholds.size()){
HashMap<String, Double> testmap = new HashMap<>();
testmap.put("max",threholds.get(i-1));
testmap.put("min",0.0);
boudaries.put(keys.get(keys.size()-1).split("/")[1], testmap);
System.out.println(threholds.get(i-1)+" ->"+0+" : "+keys.get(keys.size()-1).split("/")[1] );
}
else if (i==0){
HashMap<String, Double> testmap = new HashMap<>();
testmap.put("max",Math.exp(1000));
testmap.put("min",threholds.get(i));
boudaries.put(keys.get(0).split("/")[0], testmap);
System.out.println(Math.exp(100) +" ->"+threholds.get(i)+" : "+keys.get(0).split("/")[0] );}
else{
HashMap<String, Double> testmap = new HashMap<>();
testmap.put("max",threholds.get(i-1));
testmap.put("min",threholds.get(i));
boudaries.put(keys.get(i).split("/")[0], testmap);
System.out.println(threholds.get(i-1)+" ->"+threholds.get(i)+" : "+keys.get(i).split("/")[0]);}
}
System.err.println(boudaries);
return boudaries;
}
- “键”是一个“列表”,代表 A、B、C、D 类。
- 阈值是一个“列表”表示阈值。我们有
使用此阈值来划定界限。
- 我按值对阈值图进行排序,以便按降序获取字符串,并与双阈值列表相同,以使它们按相同顺序排列。
我循环 foreach 元素的阈值.. 对于第一项,它是关于最后一个边界,所以我将 Exp(1000) 和前一个元素作为边界.. 对于最后一个元素,它是关于一个带有 min 的边界0 和 max 阈值的最后一个元素。
我使用 split 来获取拆分数组的第一个元素,除了最后一项,我使用数组的第二个元素匹配最后一个元素。就是这样
测试:
如果我们有这个“地图”作为输入
{ "YELLOW_DARK/RED_LIGHT" : 0.20459770114942527 , "GREEN_DARK/GREEN_LIGHT" : 0.6226151930261519 , "GREEN_LIGHT/YELLOW_LIGHT" : 0.4632936507936508 , "YELLOW_LIGHT/YELLOW_DARK" : 0.3525246305418719 , "RED_LIGHT/RED_DARK" : 0.027777777777777776}
我的代码会将其转换为:
2.6881171418161356E43 ->0.6226151930261519 : GREEN_DARK
0.6226151930261519 ->0.4632936507936508 : GREEN_LIGHT
0.4632936507936508 ->0.3525246305418719 : YELLOW_LIGHT
0.3525246305418719 ->0.20459770114942527 : YELLOW_DARK
0.20459770114942527 ->0.027777777777777776 : RED_LIGHT
0.027777777777777776 ->0 : RED_DARK
并以HashMap<String, HashMap<String, Double>>返回
{GREEN_LIGHT={min=0.4632936507936508, max=0.6226151930261519}, YELLOW_DARK={min=0.20459770114942527, max=0.3525246305418719}, YELLOW_LIGHT={min=0.3525246305418719, max=0.4632936507936508}, RED_DARK={min=0.0, max=0.027777777777777776}, RED_LIGHT={min=0.027777777777777776, max=0.20459770114942527}, GREEN_DARK={min=0.6226151930261519, max=Infinity}}
{ "GREEN/LIGHT_YELLOW" : 0.5366379310344828 , "YELLOW_DARK/RED_LIGHT" : 0.18349195937745413 , "YELLOW_LIGHT/YELLOW_DARK" : 0.3571428571428571 , "RED_LIGHT/RED_DARK" : 0.08940809968847352}