51,397
社区成员




需求是这样的:
0.12-0.35 为 持有
0.36-0.45 为 拥有
0.46-0.65 为已拥有
0.65以上 为绝对拥有
现在需要判断一个list ,list里面的一个对象的属性为 partners 来判断,然后把判断的值写回到list的对象的属性为 desc中
例如:partners =0.13 然后处理完之后 List中的这个对象应该是:
{
partners :0.13,
desc:持有
}
急在线等各路大神求解
举个简单的例子吧
@Component
public interface Parent{
//最小数
double minDouble;
//最大数
double MaxDouble;
String boolHave(double dd);
}
@Component
public class Chiyou implement Parent{
//最小数
double minDouble=2;
//最大数
double maxDouble=3;
public String boolHave(double dd){
if(minDouble<dd<maxDouble){
return "持有";
}
return null;
}
}
@Component
public class Yongyou implement Parent{
//最小数
double minDouble=4;
//最大数
double maxDouble=5;
public String boolHave(double dd){
if(minDouble<dd<maxDouble){
return "持有";
}
return null;
}
}
....
public class TestController{
@autowaird
private Parent[] parents;
public void test(){
for(Parent parent: aprents){
String str=parent.boolHave(dd);
if(str!=null){
System.out.println(str);
}
}
}
}
大概思路是:
策略模式,弄个父类接口,然后根据不同判断类型写成不同的子类实现对比方法,然后再想办法加载所有的子类,最后递归所有子类,看是否返回非null,最后输出
为什么要回写,你把desc属性的Get方法重写一下不就行了吗?
private Double partners;
private String desc;
public String getDesc() {
if (StringUtils.isNotBlank(desc)) {
return desc;
}
desc = partners < 0.12 ? null : partners < 0.36 ? "持有" : partners < 0.46 ? "拥有" : partners < 0.66 ? "已拥有" : "绝对拥有";
return desc;
}
怎么感觉优雅不起来,只能用最笨的方法了
@Test
public void test1() {
A a1 = new A(0.13d, null);
A a2 = new A(0.37d, null);
A a3 = new A(0.47d, null);
A a4 = new A(0.67d, null);
List<A> list = Lists.newArrayList(a1, a2, a3, a4);
Function<A, A> f1 = A::m2;
Function<A, A> f2 = f1.andThen(A :: m);
list.forEach(v -> f2.apply(v));
System.out.println(list);
}
@Setter
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
static class A {
private Double partners;
private String desc;
public static A m(A a){
Double d = a.getPartners();
if (Objects.isNull(d)) {
a.setDesc("");
}
if (m1(d, 0.12D, 0.35D)) {
a.setDesc("1");
}
if (m1(d, 0.36D, 0.45D)) {
a.setDesc("2");
}
if (m1(d, 0.46D, 0.65D)) {
a.setDesc("3");
}
if (d.compareTo(0.65D) > 0) {
a.setDesc("4");
}
return a;
}
public static boolean m1(Double current, Double min, Double max) {
return Math.max(min, current) == Math.min(current, max);
}
public static A m2(A a) {
return a;
}
}
感觉一点都不简洁 ....