Browse Source

新增BigDecimal分值计算器

master
wxz 5 years ago
parent
commit
589ad1879e
  1. 80
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/BigDecimalScoreCalculator.java
  2. 26
      epmet-module/data-statistical/data-statistical-server/src/test/java/com/epmet/stats/test/normalizing/DemoScoreCal.java

80
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/BigDecimalScoreCalculator.java

@ -0,0 +1,80 @@
package com.epmet.support.normalizing;
import java.math.BigDecimal;
import java.util.List;
/**
* BigDecimal的分值计算
* 每一种数据类型的计算都要继承ScoreCalculator并且实现其抽象方法实现数据类型的转换
*/
public class BigDecimalScoreCalculator extends ScoreCalculator {
/**
* 初始化基于原数组的整数分值计算
* 务必在该构造方法最后调用父类的prepare()方法
* @param sourceArray 源数据完整数组
* @param minScore 分值区间的左边界
* @param maxScore 分值区间的右边界
* @param correlation 相关性
*/
public BigDecimalScoreCalculator(BigDecimal[] sourceArray, BigDecimal minScore, BigDecimal maxScore, Correlation correlation) {
this.sourceArrary = sourceArray.clone();
this.minScore = minScore;
this.maxScore = maxScore;
this.correlation = correlation;
prepare4SourceArray();
System.out.println("最小值:"+minScore+";最大值:"+maxScore);
}
/**
* 初始化基于原数组的整数分值计算
* @param sourceList 源数据完整列表
* @param minScore 分值区间的左边界
* @param maxScore 分值区间的右边界
* @param correlation 相关性
*/
public BigDecimalScoreCalculator(List<BigDecimal> sourceList, BigDecimal minScore, BigDecimal maxScore, Correlation correlation) {
this.sourceArrary = sourceList.toArray();
this.minScore = minScore;
this.maxScore = maxScore;
this.correlation = correlation;
prepare4SourceArray();
System.out.println("最小值:"+minScore+";最大值:"+maxScore);
}
/**
* 初始化基于边界值的整数分值计算
* @param minSourceValue 左边界值
* @param maxSourceValue 右边界值
* @param minScore 分值区间的左边界
* @param maxScore 分值区间的右边界
* @param correlation 相关性
*/
public BigDecimalScoreCalculator(BigDecimal minSourceValue, BigDecimal maxSourceValue, BigDecimal minScore, BigDecimal maxScore, Correlation correlation) {
this.minScore = minScore;
this.maxScore = maxScore;
this.minValue = minSourceValue;
this.maxValue = maxSourceValue;
this.correlation = correlation;
prepare4BoundaryValue();
System.out.println("最小值:"+minScore+";最大值:"+maxScore);
}
@Override
public BigDecimal getMaxFromSourceArray() {
BigDecimal[] intSourceArrary = (BigDecimal[]) this.sourceArrary;
return intSourceArrary[intSourceArrary.length - 1];
}
@Override
public BigDecimal getMinFromSourceArray() {
BigDecimal[] intSourceArrary = (BigDecimal[]) this.sourceArrary;
return intSourceArrary[0];
}
@Override
public BigDecimal convertValue2BigDecimal(Object sourceValue) {
return (BigDecimal) sourceValue;
}
}

26
epmet-module/data-statistical/data-statistical-server/src/test/java/com/epmet/stats/test/normalizing/DemoScoreCal.java

@ -91,5 +91,31 @@ public class DemoScoreCal {
System.err.println("--------------------------------");
}
@Test
public void testBigDecimalBatchCalculate() throws InterruptedException {
//{4,8,1,3,2}
// 每个指标需要单独的分支计算器,因为每个指标的最大最小值是不同的
ScoreCalculator sc1 = new BigDecimalScoreCalculator(new BigDecimal(1), new BigDecimal(8), ScoreConstants.MIN_SCORE, ScoreConstants.MAX_SCORE, Correlation.NEGATIVE);
ScoreCalculator sc2 = new BigDecimalScoreCalculator(new BigDecimal(1), new BigDecimal(8), ScoreConstants.MIN_SCORE, ScoreConstants.MAX_SCORE, Correlation.NEGATIVE);
List<SampleValue> index1SampleValues = Arrays.asList(new SampleValue<>("id1", new BigDecimal(4)), new SampleValue<>("id2", new BigDecimal(1)), new SampleValue<>("id3", new BigDecimal(8)));
List<SampleValue> index2SampleValues = Arrays.asList(new SampleValue<>("id1", new BigDecimal(1)), new SampleValue<>("id2", new BigDecimal(8)), new SampleValue<>("id3", new BigDecimal(3)));
// 每个指标的信息,包括样本列表,权重,指标标记
IndexInputVO index1VO = new IndexInputVO("aaa", index1SampleValues, new BigDecimal(1), sc1);
IndexInputVO index2VO = new IndexInputVO("bbb", index2SampleValues, new BigDecimal(1), sc2);
List<IndexInputVO> indexInputVOS = Arrays.asList(index1VO, index2VO);
BatchScoreCalculator batchScoreCalculator = new BatchScoreCalculator();
List<IndexOutputVO> result = batchScoreCalculator.exec(indexInputVOS);
System.err.println("--------------------------------");
result.stream().forEach(r -> System.out.println(r));
Thread.sleep(10);
System.err.println("--------------------------------");
}
}

Loading…
Cancel
Save